require.jsアプリケーションを最適化しようとしています。アプリケーションはDurandalを使って書かれており、gulp-durandalプラグインを介してr.jsにアクセスしています(gulpでDurandalアプリケーションを構築するための適切なデフォルトを持つr.jsのラッパーです)。R.js optimmiserがすべての依存関係をロードしていません
ローカルマシンでgulpタスクを実行すると、すべて正常に動作します。しかし、ビルドサーバー(Team City)でまったく同じgulpタスクを実行しようとすると、ビルドが失敗します。ビルド中にエラーはスローされず、成功したように見えますが、生成されたjsファイルは、ローカルにビルドされたバージョンの2/3で、いくつかのファイルがありません。
r.jsのログインを有効にすると、ビルドサーバー上のタスクが正しい依存関係を引き出していないように見えます。例えば、私のmain.jsで私の最初に輸入
define(["require", "exports", './validationOnChange', './sortCode', './currency', './maskedAccountNumber', './showInfo', './scrollTo', './validation', './slideDown', './datepicker', './numericInput', './date', './command', 'bindings/worldPay', './collapse'], function (require, exports) {
"use strict";
})のリストを指しI「はバインディング/バインディング」をもたらすコールを定義します。
これらの輸入の一例)が
define(["require", "exports", 'knockout', 'moment'], function (require, exports, ko, moment) {
"use strict";
ko.bindingHandlers['date'] = {
init: function (element, valueAccessor, allBindingsAccessor) {
var val = ko.unwrap(valueAccessor());
if (val) {
$(element).html(moment(val).format('DD/MM/YYYY'));
}
}
};
}です。
作業ローカルタスクでは、これらのファイルはすべて依存関係と共にインポートされます。たとえば、上記のファイルはビルドに瞬時に引き込まれます。モーメントはデフォルトのアプリケーションファイルにはありませんが、requirejs設定のパスに指定されています。ビルドサーバーで同じタスクを実行すると、上記のファイルが含まれますが、瞬間ではありません。ビルドされたファイルを実行しようとすると、モジュールが見つからなかったというエラーが表示されます(つまり、ファイルには表示されていますが、上記のモジュールは見つかりません)。
r.jsのログによると、ローカルマシンのビルドプロセスはmain.jsをロードし、必要に応じてファイルをインポートする依存関係ツリーを歩きます。次に、既定のappディレクトリの下にある、まだ読み込まれていないファイルを取り込みます。
しかし、サーバー上では、r.jsはmain.jsファイルを読み込み、明示的な依存関係を持っていますが、依存関係チェインを続行するのではなく、appフォルダーの下にあるすべてのファイルを読み込むだけです。
私はアーモンドの有無にかかわらず、uglifyの有無にかかわらず、除外、相対パス、絶対パスを削除し、findNestedDependenciesをtrueに設定し、main.jsをinsertRequireで明示的にロードしました。誰もがこれを引き起こす可能性があることを知っている?
ありがとうございました。