requirejs 依赖项加载顺序不起作用

requirejs dependencies load order doesn't work

我有这样一段代码:

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...

可能我错过了什么,但是什么?

完整代码在这里:http://embed.plnkr.co/zjQhBdOJCgg8QuPZ5Q8A/

您对 RequireJS 工作方式的基本误解。对于不调用 define 的文件,我们使用 shim。使用 shim 可以说 RequireJS 会向这些文件添加一种 "virtual define" 。您显示的垫片相当于:

define(['myFriend', 'myCoworker'], function (...) {...});

传递给 definerequire 调用的依赖项列表本身并没有指定 中的加载顺序] 依赖列表中列出的模块。 依赖列表所做的唯一事情是指定必须在调用回调之前加载列表中的模块。就这些了。

如果想让myFriend先加载,需要让myCoworker依赖它:

shim: {
    mods: ['myFriend', 'myCoworker'],
    myCoworker: ['myFriend'],
}

顺便说一下,shim 确实是要用于您无法控制的代码。对于您自己的代码,您应该在代码中使用 define 而不是 在配置中设置 shim