如何实现一个插件,仅在需要时才修改原始模块?

Jan*_*pke 6 javascript requirejs

我有一个扩展原始模块的插件.
它只应在明确要求时修改模块.

问题:
只要需要一次,原始模块就会永久修改,也适用于插件不是依赖项的情况.
这里的顺序无关紧要,只需要一次插件即可.

例:

define("main", [], function() {
    return {opt: "A"};
});
define("plugin", ["main"], function(obj) {
    obj.opt = "B";
});
require(["main", "plugin"], function(obj) {
    console.log(obj.opt); // should log B
});
require(["main"], function(obj) {
    console.log(obj.opt); // should log A but logs B
});
Run Code Online (Sandbox Code Playgroud)

我想要走的路是以某种方式告诉要求总是main从源重新加载而不是使用缓存版本.
我不知道怎么样.
或者也许有更优雅的方式?

伙计们,请赐教.

小提琴:http://jsfiddle.net/r75e446f

更新:有些人可能会发现知道我需要为我的业力单元测试环境测试带有和不带插件的模块这一点很重要.

更新2:请看下面我自己的解决方案.

Jan*_*pke 0

所以我找到了如何实现、我想要什么,并想在这里分享。

答案称为“上下文”,它是 requirejs 配置中的一个选项。

http://requirejs.org/docs/api.html#multiversion

以下是我实施解决方案的方法:

var reqOne = require.config({
    context: 'one'
});
var reqTwo = require.config({
    context: 'two'
});
reqOne(["main", "plugin"], function(obj) {
    console.log(obj.opt); // logs B
});
reqTwo(["main"], function(obj) {
    console.log(obj.opt); // logs A
});
Run Code Online (Sandbox Code Playgroud)

不幸的是,这在fiddle中不起作用,因为第二个 require 将尝试从外部加载主模块,并且我无法将文件上传到 jsfiddle 。

但事实是,他尝试这样做并且没有使用其他需求中已加载的“主”模块,这应该证明他的方法有效。
如果将定义外包给单个文件,这就像一个魅力。

感谢所有插话的人。