-1
我是一個受虐狂,所以我決定改變我在我的項目中加載require.js的方式。我所做的只是從這裏(用Modernizr.load)去...未捕獲的錯誤:不匹配的匿名定義()模塊
<script type="text/javascript">
function requireJsConfig() {
requirejs.config({
'baseUrl': '{{ STATIC_URL }}js',
'paths': {
'jquery': 'libraries/jquery',
'backbone': 'libraries/backbone',
'underscore': 'libraries/underscore',
'jquery.cookie': 'libraries/jquery-cookie',
'tinymce': 'tinymce/tinymce.min',
'react' : 'libraries/react',
'history': 'history'
},
waitSeconds: 30,
shim: {
'jquery' : 'jquery',
'underscore' : {
exports: '_'
},
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'jquery.cookie': {
deps: ['jquery'],
exports: '$.cookie'
},
'tinymce': {
deps: ['jquery'],
exports: 'tinymce'
}
}
});
define('static_url', [], "{{ STATIC_URL }}");
window.static_url = "{{ STATIC_URL }}";
define('PUBNUB_SUBSCRIBE_KEY', [], "{{ PUBNUB_SUBSCRIBE_KEY }}");
require(["teacher"]);
};
Modernizr.load({
load: '{{ STATIC_URL }}js/require.js',
complete: function() {
requireJsConfig();
}
});
</script>
...這(不使用Modernizr.load)...
<script type="text/javascript" src="{{ STATIC_URL }}js/require.js"></script>
<script type="text/javascript">
function requireJsConfig() {
requirejs.config({
'baseUrl': '{{ STATIC_URL }}js',
'paths': {
'jquery': 'libraries/jquery',
'backbone': 'libraries/backbone',
'underscore': 'libraries/underscore',
'jquery.cookie': 'libraries/jquery-cookie',
'tinymce': 'tinymce/tinymce.min',
'react' : 'libraries/react',
'history': 'history'
},
waitSeconds: 30,
shim: {
'jquery' : 'jquery',
'underscore' : {
exports: '_'
},
'backbone': {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
'jquery.cookie': {
deps: ['jquery'],
exports: '$.cookie'
},
'tinymce': {
deps: ['jquery'],
exports: 'tinymce'
}
}
});
define('static_url', [], "{{ STATIC_URL }}");
window.static_url = "{{ STATIC_URL }}";
define('PUBNUB_SUBSCRIBE_KEY', [], "{{ PUBNUB_SUBSCRIBE_KEY }}");
require(["teacher"]);
};
requireJsConfig();
</script>
...現在我得到這個:
Uncaught Error: Mismatched anonymous define() module: function (){return r}
FWIW,這是在錯誤發生的事情(在require.js):
function intakeDefines() {
var args;
//Any defined modules in the global queue, intake them now.
takeGlobalQueue();
//Make sure any remaining defQueue items get properly processed.
while (defQueue.length) {
args = defQueue.shift();
if (args[0] === null) {
return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));
} else {
//args are id, deps, factory. Should be normalized by the
//define() function.
callGetModule(args);
}
}
}
順便說一句,我已經驗證these沒有適用。
爲什麼這個看似無害的變化會導致核彈在我的項目中爆炸? (是的,一枚實際的核彈引爆......彷彿數百萬的聲音突然在恐怖中大聲喊叫,並突然沉默......)
但我不是在HTML'
讓我們來看看,如果我能解釋它比帕特里克沒有更好的...
,因爲它檢測它是否與AMD的裝載機運行時,您不需要爲
underscore
一個shim
,如果是這樣,那麼它調用define
。 對於調用define
的模塊,請勿使用shim
。您還應該刪除用於jQuery的
shim
。除非您使用的是古老版本,否則它也會檢測到它是使用AMD加載程序運行並呼叫define
。此外shim
jquery: "jquery"
是沒有意義的。 (最接近有意義shim
我能想到的是jquery: ["jquery"]
這將意味着「jquery
取決於jquery
」。)至於爲什麼當您使用
shim
與調用define
你進入未定義的模塊它會前工作...領土:有時它起作用,有時它不起作用。我不知道其他模塊是否需要墊片,因爲我不經常使用它們。如果我是你,我會檢查他們是否撥打
define
。來源
2015-05-12 16:15:58 Louis
謝謝。這在邏輯上是合理的,但是在從墊片中刪除jquery,underscore和backbone(所有這些都支持AMD)之後,當我啓動我的服務器時會遇到不同的錯誤,例如'Uncaught TypeError:object is not a function'試圖創建主幹模型或'$ .ajaxSetup不是函數'。每次啓動服務器時,錯誤都來自需求鏈中的不同腳本。因此,即使我的第一個必需腳本的第一行是'require(['jquery','underscore','backbone',...])',jquery,underscore和backbone現在還沒有被加載。 –