我有这样的代码:
requirejs.config({
urlArgs: "bust=" + (new Date()).getTime(),
paths: {
mods: 'default',
myFriend: 'myFriend',
myCoworker: 'myCoworker'
},
shim: {
mods: ['myFriend', 'myCoworker']
}
});
require(['mods'], function (mods) {
// something to do
});
和作为依赖项的模块:
我的朋友.js
var mess = `<a really huge text, almost 200 Kbytes>`
console.log('This code is ran in the myFriend module...', {mess:mess});
我的同事.js
console.log('This code is ran in the myCoworker module...');
var wrk = {
name: 'John'
};
所以我希望,根据填充程序应该始终在myCoworker.js之前加载myFriend.js(由console.output检查(。但事实并非如此。控制台输出显示:
This code is run in the myCoworker module...
然后
This code is run in the myFriend module...
可能我错过了什么,但是什么?
整个代码在这里:http://embed.plnkr.co/zjQhBdOJCgg8QuPZ5Q8A/
你处理一个关于 RequireJS 工作原理的根本误解。我们将shim
用于不调用的文件 define
.使用shim
使得RequireJS可以说为这些文件添加一种"虚拟定义"。显示的填充程序等效于:
define(['myFriend', 'myCoworker'], function (...) {...});
传递给define
或require
调用的依赖项列表本身并不指定依赖项列表中列出的模块之间的加载顺序。依赖关系列表唯一要做的就是指定在调用回调之前必须加载列表中的模块。就这样。
如果你想先加载myFriend
,你需要使myCoworker
依赖于它:
shim: {
mods: ['myFriend', 'myCoworker'],
myCoworker: ['myFriend'],
}
顺便说一下,shim
实际上是用来写你无法控制的代码的。对于您自己的代码,您应该在代码中使用define
,而不是在配置中设置shim
。