そのため、RequireJS の r.js を使用して、すべての JavaScript モジュールを 1 つのファイルにコンパイルしようとしています。コードは別々のファイルに残りますが、スクリプトは問題なく実行されます。しかし、r.js がそれらをすべて同じファイルに配置した後、momentTimezones がロードされないようです。モジュール angularMoment はそれらの両方を使用し、モーメントのみがロードされます。
main.js で使用している shim は次のとおりです。
shim: {
angular: {
exports: 'angular'
},
uiRouter: ['angular'],
ngResource: ['angular'],
ngAnimate: ['angular'],
angularLocaleSweden: ['angular'],
angularMoment:{
deps: ['angular', 'momentTimezones', 'moment'],
exports: 'angularMoment'
},
uiModal: ['angular'],
angularConfirm: ['uiModal'],
lodash: {
exports: '_'
},
jquery: {
exports: '$'
},
angularToastr: ['jquery', 'angular'],
'jquery.signalr': ['jquery'],
'signalr.hubs': ['jquery.signalr'],
'ng-file-upload': ['angular'],
'ng-file-upload-shim': ['angular'],
'ng-img-crop': ['angular']
}
これは私のr.jsビルド構成です:
({
baseUrl: './Client',
mainConfigFile: './Client/main.js',
name: 'main',
out: './Client/main.min.js',
//wrapShim: true,
optimize: 'none',
//findNestedDepencies: true
})
コンパイルした main.js を実行しようとすると、次のようになります。
TypeError: moment.utc(...).tz is not a function
と
angular-moment: named timezone specified but moment.tz() is undefined. Did you forget to include moment-timezone.js?
他のすべてが機能します。コンパイルされた main.js を調べたところ、moment.js のコンテンツの後、angularMoment.js のコンテンツの前に、moment-timezones のコンテンツがそこにあります。