我想加载一些非AMD模块(以及通过require-css的CSS),它们彼此依赖(我的情况是CodeMirror及其一些插件,但问题是通用的);但我只在某些情况下需要这个,而不是在其他情况下。这就是为什么我不想用所有已知的垫片依赖关系组合来污染主require.config
调用。
当我想要包含该集合时,我在依赖项列表中包含codemirror_set
,而codemirror_set.js
本身只包含简单的
define([
'lib/codemirror/js/codemirror',
'...', // some addons and css's
]);
问题是,define
中的那些依赖关系是相互依赖的,但是当我在require.config({shim:{...}});
之前添加define
时,如果我将其包含在主require.config
中,则不会受到尊重。 {1}}我在哪里映射路径等它有效,但它被重复使用,而且正如我所写,我不想用所有可能性来污染它。
如何在包含相互依赖的依赖项的define
之前及时包含填充程序依赖项?
P.S。:即使我在需要codemirror_set
的文件中包含shim deps配置,但它有更多,所以它需要被复制到它们中的每一个。我想只定一次。
答案 0 :(得分:0)
此代码执行我理解您要执行的操作:在运行时添加填充程序。这是modA
模块。加载时,无法访问modB
。 require.config
调用添加了访问它所需的配置,然后加载它:
define(function () {
require.config({
paths: {
'modB': "../others/modB"
},
shim: {
'modB': {exports: "value"}
}
});
require(['modB'], function (modB) {
console.log('loaded modB');
console.log("modB's value", modB);
});
});
答案 1 :(得分:0)
我找到了一个解决方案:如果我想定义modA
,那么它取决于modB
和modC
,我需要设置modB
和{之间的填充依赖关系{1}}及时,我需要将定义分成两个文件:
modC
:
modA.js
require.config({shim:{
modB: { deps: [ 'modC' ] }
});
define(['./modA-inner'], function (x) { return x; });
:
modA-inner.js
define(['modB', 'modC'],
...
);
中的modA.js
中的配置在modA-inner.js
内得到尊重,因此依赖关系会得到解决。虽然它需要再往一次装载。