2012-03-19 4 views
10

私は現在、大きなJavaScriptプロジェクトに取り組んでおり、RequireJSを使用していくつかの構造を適用しています。単一のビルドファイルでRequireJSのオプティマイザを使用して複数の出力を生成する

オプティマイザ(r.js)を使用してビルドを構成して、私のプロジェクトが1つのミニファイルにバンドルされるようにしたいと考えています。これはかなり簡単ですが、私は自分のプロジェクトにいくつかのパッケージを用意しており、それぞれのパッケージを独自の縮小されたjavascriptファイルに組み込みたいと思っています。

フォルダ構造の例:main.jsファイルは、モジュールのエントリポイントである

src/core/main.js 
src/core/util/HashMap.js (
src/package1/main.js 
src/package1/views/view1.js 

core.min.js 
package1.min.js 

私はこの仕事を得るように見えることはできませんが。 私は、ビルドが完了した後、私は、次の2つの出力を持っているであろうと、このような方法で、私のビルドを設定したいと思い

。ビルドコンフィグの modulesプロパティを使用しても、各モジュールを小さくするようではありません。

私がここで間違っていることに誰かが光を当てることはできますか?

+0

モジュールごとにビルドプロファイルを持ち、 'empty:'スキームを使用して、特定のモジュールの出力から非モジュールコードを削除することができますか? http://requirejs.org/docs/optimizationhtml#empty –

+0

これは可能ですが、1つの設定ファイルを持っていて、ビルドコマンドを1回だけ実行する必要があります。 – thomaux

+1

モジュールごとに 'exclude'を使用できますか? https://github.com/jrburke/r.js/blob/c319938abb55f493d0a46566114364c4935321de/build/example.build.js#L240 –

答えて

0

私はこれを尋ねた時点で何が間違っていたのか正確には覚えていませんが(私が当時使用していた現在のRequireJSバージョンのバグであった可能性もあります)、この種の設定は簡単に私の質問で述べたように)modulesセクション。

optimize:"uglify", 
dir: 'out', 
modules: [ 
    { 
     name: "src/core/Main" 
    }, 
    { 
     name: "src/package1/Main" 
    } 
], 
... 

これはoutの下に次のような構造になります::

out 
|--core 
: |--Main.js 
|--package1 
: |--Main.js 

出力フォルダを平らにするために、出力ファイルの名前を変更するために利用できるオプションがあり、すべてを排除するために、次のように単にあなたのモジュールを宣言coreパッケージはpackage1からですが、基本的にこれは私が探していた構造です。

1

私は、Require.JSに必要なすべてを正確に行うことができませんでした。

私は現在、このためにGruntを使用しています。私はRequire.JS plugin for Gruntを持っていて、1ダースのモジュールファイルを2つのファイルにまとめるようにしました。私はmodules,empty:excludeをここに、そしてこれを達成するのに役立てて使用します。 Require.JSは依然として依存関係に基づいてモジュールを結合する最良の方法です。

次に、Uglify plugin for Gruntを使用して出力を個別に縮小します。

これはあなたのユースケースでは役に立たないかもしれませんが、Grunt's concat pluginを使用して、自分が好きなように出力することもできます。

これはすべてGruntfile.jsにあるため、ファイルが変更されるたびにgrunt watchが自動的に発生し、開発のリフレッシュテストループがそのビットより良くなります。

関連する問題