0

requirejs (v2.1.13) を使用して log4javascript (v1.4.10) を含めると、js 変数log4javascriptは定義されていませんが、chrome ネットワーク コンソールでわかるように log4javascript.js が正常に読み込まれます。

これが私のrequirejs構成です:

requirejs.config({
'baseUrl': 'resources/js',
'paths': {
    'angular': 'libs/angularjs/angular',
    'jquery' : 'libs/jquery/jquery-2.1.1.min',
    'bootstrap' : 'libs/bootstrap/bootstrap',
    'log4javascript': 'libs/log4javascript/log4javascript_uncompressed'
},
'shim' : {
    'angular' : {'exports' : 'angular', deps: ['jquery']},
    'jquery': {'exports' : 'jquery'},
    'bootstrap': {'exports' : 'bootstrap', deps: ['jquery']}
}});

Sine 1.4.10 log4javascript は AMD をサポートする必要があるため、shim を追加する必要はありません。

私は何が間違っているのか理解できません。助けてください!

UPD: バージョン 1.4.10 の AMD サポートに何か問題があるようです。「log4javascript_uncompressed.js」の次の行をコメントアウトして shim を追加したところ、すべてが正常になりました。

/*
if (typeof define == "function" && define.amd) {
    // AMD. Register as an anonymous module.
    define(factory);
} else if (typeof module != "undefined" && typeof exports == "object") {
    // Node/CommonJS style
    module.exports = factory();
} else {
    // No AMD or CommonJS support so we place log4javascript in (probably) the global variable
*/
    root.log4javascript = factory();
//}
4

1 に答える 1

3

requirejs (v2.1.13) を使用して log4javascript (v1.4.10) を含めると、js 変数 log4javascript は定義されていませんが、chrome ネットワーク コンソールでわかるように log4javascript.js が正常に読み込まれます。

これは、すべてが完全に機能している場合に起こることです。コメントアウトしたコードを見てください。log4javascript が AMD ローダーを検出すると、名前付きの変数がグローバル スペースにリークしませんlog4javascript。AMD ローダーまたはノードで実行されていることを検出しない場合にのみ、その変数をリークします。

log4javascript を使用するコードがすべて AMD モジュール内にある場合、log4javascript にアクセスする適切な方法は、defineまたはrequire呼び出しに依存関係として含めることです。例えば、require(['foo', 'log4javascript'], function (foo, log4javascript) {...});

log4javascript変数がグローバル空間に存在することを期待するコードで作業する必要がある場合は、意図的に変数をリークすることで回避できます。その方法の詳細については、この回答を参照してください。

于 2015-01-28T11:24:21.887 に答える