如何覆盖requirejs中的模块?

时间:2015-04-21 21:39:08

标签: node.js requirejs

昨晚刚开始使用带有requirejs的节点。

我想根据配置参数替换模块(例如,从命令行传入)。

目前,moduleA需要moduleB。如何覆盖moduleB或替换moduleC呢?

修改

我使用RequireJS。

我真的想要第三方模块,比如moduleMaster来指定更新。目标是允许多种可能的行为(即多个数据库访问对象,每个模块1个),然后允许主模块选择其他模块使用哪个。类似的东西:

// module A
define(['B'], function(B) {
  console.log(B.msg);
});

// module B
define({
  msg: "I am B"
});

// module C
define({
  msg: "I am C"
});

// module D
define([], function() {
  // TODO: overwrite moduleA so that it uses moduleC instead
});

1 个答案:

答案 0 :(得分:1)

没有覆盖模块的事情。您可以做的是让RequireJS根据配置选项更改其加载的内容。例如,

var requirejs = require('requirejs');
var define = requirejs.define;

define('A', ['Adep'], function(Adep) {
  console.log(Adep.msg);
});

define('B', {
  msg: "I am B"
});

define('C', {
  msg: "I am C"
});

var make_A_depend_on = 'C';

requirejs.config({
    map: {
        '*': {
            'Adep': make_A_depend_on
        }
    }
});

requirejs(['A']);

如果您更改make_A_depend_on以使其值为"B",则A将加载B而不是C。设置配置,以便在需要名为Adep的madule时,RequireJS实际加载make_A_depend_on中指定的内容。