5

私はrequirejsを使用して製品の成果物を構成していますので、requirejsのgruntタスクを使用して適切なロードシーケンスを取得するためにライブラリを組み合わせてモジュールの依存関係を設定しています。ライブラリー・サーバーで非結合ライブラリーにアクセスできる間は、ランタイム・モジュール注入を使用しても問題はありません。わかりやすくするために、私はすべての細身化/ uglificationを無効にし、js美化を有効にしました。grunt-contrib-requirejsライブラリをラップしないでください。

requirejs: { 
     dist: { 
      // Options: https://github.com/jrburke/r.js/blob/master/build/example.build.js 
      options: { 
       // `name` and `out` is set by grunt-usemin 
       // name: 'App', 
       baseUrl: yeomanConfig.app + '/scripts', 
       mainConfigFile: yeomanConfig.app + '/scripts/config.js', 
       out: yeomanConfig.dist + '/scripts/main.js', 
       optimize: 'none', 
       // TODO: Figure out how to make sourcemaps work with grunt-usemin 
       // https://github.com/yeoman/grunt-usemin/issues/30 
       //generateSourceMaps: true, 
       // required to support SourceMaps 
       // http://requirejs.org/docs/errors.html#sourcemapcomments 
       beautify: false, 
       removeCombined: false, 
       generateSourceMaps: false, 
       preserveLicenseComments: false, 
       useStrict: true, 
       mangle: false, 
       compress: false, 
       // wrap: true, 
       // https://github.com/mishoo/UglifyJS2 
      } 
     } 
    }, 

私は、剣道、角度、角度のキノUIを使用しています。私は剣道がAMDモジュール対応であると理解していますが、Angular-Keno-UIはそうではありません。私はシムを作成することを期待していましたが、それは適切なrequirejs define関数でラップされていますが、これが起きているとは思われません。私はそのように自分自身をラップするモジュールの準備不足を解決するには

require.config({ 
     cjsTranslate: true, 
     paths: { 
      jquery: 'vendor/jquery/jquery', 
      'angular-kendo-ui': 'vendor/angular-kendo-ui/build/angular-kendo', 
      kendo: 'vendor/kendoui.complete.2013.2.918.trial/js/kendo.all.min', 
      angular: 'vendor/angular/angular', 
      requirejs: 'vendor/requirejs/require', 
      'angular-animate': 'vendor/angular-animate/angular-animate', 
      'angular-ui-router': 'vendor/angular-ui-router/release/angular-ui-router.min', 
      'angular-resource': 'vendor/angular-resource/angular-resource' 
     }, 
     shim: { 
      jquery: { 
       exports: '$' 
      }, 
      angular: { 
       deps: [ 
        'jquery' 
       ], 
       exports: 'angular' 
      }, 
      'angular-resource': { 
       deps: [ 
        'angular' 
       ] 
      }, 
      'angular-kendo-ui': { 
       deps: [ 
        'angular', 
        'kendo' 
       ] 
      }, 
      'angular-ui-router': { 
       deps: [ 
        'angular' 
       ] 
      } 
     } 
    }); 

define('angular-kendo-ui', [ 
     'angular', 
     'kendo' 
     ], function (
     angular, 
     kendo 
    ) { 
     < original angular-kendo-ui source > 
    }); 

は、私はシムのアプリケーションを誤解したことがありますか?それは私が持っていると、実際に定義されたパスをラップすることはありませんが、モジュールが要求されている場合は、むしろちょうどそれを指します(動的モジュールの読み込みではうまくいきます)

私はこれらの技術の最初の吟味の間、 requirejs(または私のパイプラインにある資産ミューテータの1つ)が自動的にモジュールを私のために包み込む方法がありました。誰も私のヒントを持って、私はそれがパスとして設定で定義されたモジュールをラップするrequirejsだと思うが、多分私は間違っていた。以下に走っているタスクのプリントアウトです:

Done, without errors. 

    Elapsed time 
    build       887ms 
    useminPrepare:html    22ms 
    concurrent:dist    8s 
    autoprefixer:dist    174ms 
    requirejs:dist     19s 
    jsbeautifier:dist    2s 
    concat:public/styles/main.css 46ms 
    concat:public/scripts/main.js 56ms 
    cssmin:public/styles/main.css 81ms 
    copy:dist      26ms 
    usemin:html     5s 
    usemin:css      24s 

答えて

2

それは(あなたのオプティマイザのバージョンに応じて)ちょうど野生の推測だが - とてもクールではない - 設定 - ドキュメントは、ここで述べている:2.1のよう

を.11、shimmed依存関係は、中間依存関係がAMDの依存関係である場合、 自身の依存関係を助けるために、define()ラッパー にラップすることができます。標準的な例は、 jQueryとUnderscoreに依存するBackboneを使用するプロジェクトです。バックボーンを利用可能にしたいShimmed依存関係は、 のAMD互換バージョンは依存関係が になるまで、define()関数を実行しないため、すぐにビルドで表示されません。これらのシムに依存するシンプルな依存関係をラップすることでこれを避けることができますが、 shimmed依存関係が奇妙な方法で グローバルスコープを使用すると他のエラーが発生する可能性があります。

ので、多分使用:

wrapShim: true 

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

あなたが「mainConfigFile」シムの設定がすでにオプティマイザにする必要があり、これは多くの場合、障害の別のポイントであるを使用しているため。

+0

3時間以上のデバッグ後、この回答が見つかりました。ありがとうございました! – LessQuesar

関連する問題