如何及时配置RequireJS shim依赖项?

时间:2014-02-08 15:38:08

标签: dependencies requirejs shim

我想加载一些非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配置,但它有更多,所以它需要被复制到它们中的每一个。我想只定一次。

2 个答案:

答案 0 :(得分:0)

此代码执行我理解您要执行的操作:在运行时添加填充程序。这是modA模块。加载时,无法访问modBrequire.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,那么它取决于modBmodC,我需要设置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内得到尊重,因此依赖关系会得到解决。虽然它需要再往一次装载。