2013-02-09 7 views
7

私はAngularJSを使用するCoffeeScriptで書かれたプロジェクトを持っています。私のベンダー依存関係は、バウアーを使用してインストールし、私のファイル構造は、このようなものですされています。私は、私がどのように使用できるかをうまくしようとしていグランとRequireJSの連結と縮小

  1. :私は何をしようとしている

    - assets 
    - js 
        - app 
        - model 
        - *.coffee 
        - factory 
        - *.coffee 
        ... 
        - app.coffee 
        - config.coffee 
        - routes.cofeee 
        - vendor 
        - angular 
        - lodash 
        ... 
        - dist 
    

    次がありますRequireJSのr.jsは私の本来のアプリケーションファイルを最適化して、基本的にすべての順序付けされたファイル(ベンダーの依存関係、私の設定とルート、そしてそれらのアプリケーションファイル)を取得します。

  2. これをGruntファイルに統合します。

私はr.jsオプティマイザを使用して試してみたが、あるようですが、すべてのdistフォルダに自分のアプリケーションファイル(マイナスベンダー依存関係)をコピーしていると多分私はあまりにも愚かなことしました。ただし、生成されたjsファイルをcoffeeに最適化することはできます。

誰もこの経験がありますか?

+0

あなたは '' r.js'と並行してrequire.js'を使用していますか? – Trevor

+0

どうすればいいですか? –

答えて

11

が、私はそれを考え出した:r.js作品をあなたのmainConfigFileし、任意のモジュールを読み込むことで、あなたの設定の中に名前を付け、ここで重要なノートはr.jsは、あなたの名前のモジュール内の最初のrequire/defineを見て、それらを追求するためにオフになるということです。そう、例えば、私はappと呼ばれる1つのという名前のモジュールを持っていた:

require ['config'], (cfg) -> 
    require ['angular'], (A) -> 
    A.module cfg.ngApp, [] 

    require ['routes'],() -> 
     require [ 
     'factory/a-factory', 

     'service/a-service', 

     'controller/a-controller' 
     ],() -> 
     A.bootstrap document, [cfg.ngApp] 

ここでの問題は、r.jsが最初requireの文を過ぎてやったことがなかったので、連結が働いていなかったということでした。私はこれを変更した場合、(私のapp.coffee)言う:

require ['config'], (cfg) -> 
    require ['angular'], (A) -> 
    A.module cfg.ngApp, [] 

    require ['bootstrap'], (bootstrap) -> 
     bootstrap() 

そして、私のbootstrap.coffee

define [ 
    'config', 
    'angular', 
    'routes', 

    'factory/a-factory', 

    'service/a-service', 

    'controller/a-controller' 
], (cfg, A, routes) -> 
    class Bootstrap 
    constructor:() -> 
     routes() 

     A.bootstrap document, [cfg.ngApp] 

これは私が唯一includes、その後r.jsとして私r.js構成でangularbootstrapを定義するために必要なことを意味し次のように残りを行います:

baseUrl: 'assets/js/app', 
mainConfigFile: 'assets/js/app/config.js', 
name: 'app', 
include: [ 
    '../vendor/requirejs/require', 
    'bootstrap' 
], 
out: 'assets/js/dist/app.js' 

A今、それはすべて正常に動作します! ~~それは私が多分私が愚かな何かをやった、しかしrequirejsを含めるようにr.jsを伝えるために持っていることを恥だ?~~

Blimey、私はそのようなdingusよ!

は、だから私のHTMLに私は私のように連結スクリプトをロードしました。本当にそれは次のようにロードされるべき

<script src="assets/js/dist/app.js"></script> 

<script src="assets/js/vendor/requirejs/require.js" data-main="assets/js/dist/app"></script> 

D'OH!

+4

あなた自身の質問への答えを返すだけでなく、その点で非常に良い答えをくれてくれてありがとう。 – ken

1

r。

https://github.com/jrburke/r.js/blob/master/build/example.build.js#L322

ネストされた依存関係がrequireJSにバンドルすることができますjsのドキュメント> v1.0.3デベロッパー

//Finds require() dependencies inside a require() or define call. By default 
//this value is false, because those resources should be considered dynamic/runtime 
//calls. However, for some optimization scenarios, it is desirable to 
//include them in the build. 
//Introduced in 1.0.3. Previous versions incorrectly found the nested calls 
//by default. 
findNestedDependencies: false, 
関連する問題