如何覆盖 requiejs 中的模块?

How do I override modules in requiejs?

昨晚刚开始使用 node 和 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
});

不存在覆盖模块这样的事情。您可以做的是让 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 的模块时,RequireJS 实际上加载在 make_A_depend_on.

中指定的内容