如何在 require.js 中为模块设置默认插件?



我正在使用require.js来加载一些JS库,并希望在加载前后运行一些通用代码。为此,我制作了一个名为plug.js的简单加载器插件:

define([], function () {
return {
load: function (name, req, onload, config) {
// Pre-load code...
req([name], function (value) {
// Post-load code...
onload(value);
});
}
};
});

当我从其他模块使用它时,它按预期工作:

define(['plug!lib1'], function (lib1) {
// Use lib1
}

但是我想防止库意外加载默认加载器,所以我尝试添加以下映射:

require.config({
// ...
map: {
'*': {
'lib1': 'plug!lib1'
}
},
// ...
}

然后,我需要模块中的库,而无需通过define(['lib1'], ...)指定插件,并且插件的预加载代码按预期运行,但加载后代码从未运行,并且我收到加载超时错误。我还尝试将映射应用于特定模块而不是*,但得到了相同的错误。

我的加载器插件代码有问题吗?是否可以将默认加载器插件与模块关联(也可以接受全局插件)?

作为替代方案,我看到使用预加载代码制作自定义模块并将它们设置为填充程序配置中的依赖项,但这看起来比在任何地方指定插件名称更不方便。

看起来像require.js试图防止循环依赖。app模块请求lib1,解析为plug!lib1plug请求再次lib1,这需要.js拒绝加载,尽管这次它将直接加载而不是递归调用plug

我重命名了原始库,问题消失了:

require.config({
// ...
paths: {
'lib1-core': 'lib1'
},
map: {
'*': {
'lib1': 'plug!lib1-core'
}
},
// ...
});

最新更新