我有这样的代码:
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
});
和作为依赖项的模块:
myFriend.js
var mess = `<a really huge text, almost 200 Kbytes>`
console.log('This code is ran in the myFriend module...', {mess:mess});
myCoworker.js
console.log('This code is ran in the myCoworker module...');
var wrk = {
name: 'John'
};
所以我希望,相应的shim应该始终在myCoworker.js之前加载myFriend.js(由console.output检查)。但它并没有。控制台输出显示:
This code is run in the myCoworker module...
然后
This code is run in the myFriend module...
可能我错过了什么,但是什么?
答案 0 :(得分:1)
您在处理RequireJS的工作方式时遇到了一个根本的误解。对于不调用shim
的文件,我们使用define
。使用shim
使得RequireJS可以说,添加一种&#34;虚拟定义&#34;那些文件。你展示的垫片相当于:
define(['myFriend', 'myCoworker'], function (...) {...});
传递给define
或require
调用的依赖项列表本身并未指定依赖项中列出的模块中的加载顺序 list。依赖列表唯一做的是指定在调用回调之前必须加载列表中的模块。这就是全部。
如果您希望首先加载myFriend
,则需要myCoworker
依赖它:
shim: {
mods: ['myFriend', 'myCoworker'],
myCoworker: ['myFriend'],
}
顺便说一下,shim
实际上是用于你无法控制的代码。对于您自己的代码,您应该在代码中使用define
,而不是在配置中设置shim
。