1

iPad / iPhoneAppWebアプリを開発しています。どちらもリソースの一部を共有しています。次に、次のようなブートストラップjsを作成します。

requirejs(['app'], function(app) {
 app.start();
});

appリソースはまたはである必要がありipadApp.jsますiphoneApp.js。そこで、オプティマイザー用に次のビルドファイルを作成します。

{
  "appDir": "../develop",
  "baseUrl": "./javascripts",
  "dir": "../public",
  "modules": [
    {
      "name": "bootstrap",
      "out": "bootstrap-ipad.js",
      "override": {
        "paths": {
          "app": "ipadApp"
        }
      }
    },
    {
      "name": "bootstrap",
      "out": "bootstrap-iphone.js",
      "override": {
        "paths": {
          "app": "iphoneApp"
        }
      }
    }
  ]
}

しかし、これはうまくいかないようです。1つのモジュールでのみ機能しますが、出力が異なる同じモジュールでは機能しません。

私の頭に浮かんだ他の唯一の解決策は、少し奇妙に思える4つのビルドファイルでした。では、ビルドファイルが1つだけ必要なソリューションはありますか?

4

1 に答える 1

1

AFAIK r.jsオプティマイザーは、指定された名前のモジュールを1回だけ出力できます。この場合、名前の付いたモジュールをbootstrap2回生成しようとしています。require.jsの作者である@jrburkeは、関連する問題について次のようにコメントしています

...現時点では、nameプロパティは常に「almond.js」であるため、対象となるスクリプトごとに個別のビルドコマンドを生成する必要があります。

彼はまた提案します:

...ビルドファイルを1つだけ実行する場合は、ノードプログラムを作成し、1つのスクリプトファイルでオプティマイザーを複数回駆動できます。この例は、requirejsをモジュールとして使用し、requirejs.optimize()を呼び出す方法を示しています。

私は自分のプロジェクトの1つで同様のアプローチを取りました。build.jsファイルをERBテンプレートにし、モジュールを実行して各モジュールに対してr.jsを1回実行するThorタスクを作成しました。しかし、 node.jsを使用した@jrburkeのソリューションはよりクリーンです。

于 2012-07-11T13:09:39.067 に答える