这个示例库在浏览器下使用 RequireJS,而在 Node.js 下使用 amdefine:
lib.js
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) }
}
})
现在这个库被节点示例程序使用
srv.js
var lib=require('./lib')
lib.set(111)
var lib2=require('./lib')
lib2.set(222)
lib.show()
lib2.show()
这是与上面相同的示例程序,但用于浏览器
索引.html
<script data-main="cli.js" src="require.js"></script>
cli.js
requirejs(['lib','lib'], function(lib, lib2) {
lib.set(111)
lib2.set(222)
lib.show()
lib2.show()
});
两个程序都会输出:
控制台日志
222
222
但所需的输出是
控制台日志
111
222
这是因为实际模块只加载一次,有没有办法告诉 RequireJS 加载模块两次,或者换句话说有两个单独的命名空间?