Javascript RequireJS加载同一个模块两次,以获得两个单独的名称空间

Javascript RequireJS加载同一个模块两次,以获得两个单独的名称空间,javascript,node.js,requirejs,Javascript,Node.js,Requirejs,此示例库在浏览器下使用RequireJS,在Node.js下使用amdefine: lib.js 现在,这个库由节点示例程序使用 srv.js 这是与上面相同的示例程序,但用于浏览器 index.html 两个程序都将输出: 控制台日志 但期望的产出是有限的 控制台日志 这是因为实际模块只加载一次,有没有办法告诉RequireJS加载两次模块,或者换句话说,有两个单独的名称空间?为什么不在lib()中创建名称空间: if (typeof define !== 'function') { var

此示例库在浏览器下使用RequireJS,在Node.js下使用amdefine:

lib.js 现在,这个库由节点示例程序使用

srv.js 这是与上面相同的示例程序,但用于浏览器

index.html 两个程序都将输出:

控制台日志 但期望的产出是有限的

控制台日志
这是因为实际模块只加载一次,有没有办法告诉RequireJS加载两次模块,或者换句话说,有两个单独的名称空间?

为什么不在lib()中创建名称空间:

if (typeof define !== 'function') { var define = require('amdefine')(module); }
define([],function () {
    var opt = 0
    return {
        set: function(x) { opt = x },
        show: function() { console.log(opt) }
    }
})
var lib=require('./lib')
lib.set(111)
var lib2=require('./lib')
lib2.set(222)
lib.show()
lib2.show()
<script data-main="cli.js" src="require.js"></script>
requirejs(['lib','lib'], function(lib, lib2) {
    lib.set(111)
    lib2.set(222)
    lib.show()
    lib2.show()
});
222
222
111
222
if (typeof define !== 'function') { var define = require('amdefine')(module); }
define('lib',function () {
    var namespaces = {}
    var Namespace = function() {
        this.opt = 0
    }

    Namespace.prototype.set = function(x) { this.opt = x },
    Namespace.prototype.show = function() { console.log(this.opt) }

    return function(name) {
        if (!namespaces[name]) namespaces[name] = new Namespace()
        return namespaces[name]
    }
})

requirejs(['lib'], function(Lib) {
    var lib = Lib('test')
    var lib2 = Lib('test1')
    lib.set(111)
    lib2.set(222)
    lib.show()
    lib2.show()
});