0

我想加载一些相互依赖的非 AMD 模块(以及通过 require-css 的 CSS)(我的案例是 CodeMirror 及其一些插件,但问题是通用的);但我只在某些情况下需要这个,而在其他情况下不需要。这就是为什么我不想require.config用所有已知的 shim 依赖项组合来污染主调用。

当我想包含集合时,我包含codemirror_set在依赖项列表中,而它codemirror_set.js本身只包含简单的

define([
  'lib/codemirror/js/codemirror',
  '...', // some addons and css's
]);

问题是,这些依赖define项相互依赖,但是当我require.config({shim:{...}});在此之前添加它时define,它不会被尊重,如果我将它包含require.config在我映射路径等的主要部分中,它可以工作,但它被重用并且正如我所写的那样不想用所有的可能性污染它。

define在包含相互依赖的依赖项之前,如何及时包含 shim 依赖项?

PS:即使我在需要的文件中包含 shim deps 配置,codemirror_set它也可以工作,但它们还有更多,因此需要将其复制到每个文件中。我想只定义一次。

4

2 回答 2

0

我找到了一种解决方案:如果我想定义modA它依赖于modBand并且我需要在和just-in-timemodC之间设置 shim 依赖关系,我需要将定义拆分为两个文件:modBmodC

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,因此依赖关系得到了应有的解决。虽然它需要一次加载往返。

于 2014-02-10T18:19:22.047 回答
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);
});

});
于 2014-02-08T15:58:53.123 回答