RequireJS 加载同一个模块两次以获得两个单独的命名空间
RequireJS load same module twice to get two separate namespaces
此示例库,它在浏览器下使用 RequireJS,并在 Node.js 下使用 amdefine :
库.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>
命令行.js
requirejs(['lib','lib'], function(lib, lib2) {
lib.set(111)
lib2.set(222)
lib.show()
lib2.show()
});
两个程序都将输出:
控制台日志
222
222
但所需的输出是
控制台日志
111
222
这是因为实际模块只加载一次,有没有办法告诉 RequireJS 加载模块两次,或者换句话说有两个单独的命名空间?
为什么不在lib(http://jsfiddle.net/cFEeR/1/)中创建命名空间:
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()
});
相关文章:
- 两个第三方JavaScript库命名冲突
- 在同一命名空间中保留两个独立的javascript文件/代码段
- 如何通过在两个节点之间拖放来制作边缘,并在细胞空间中扩展 egdehandle 扩展.js
- 包装在两个容器中的未命名 href 链接
- 如何在两个图像之间添加空间
- RequireJS 加载同一个模块两次以获得两个单独的命名空间
- 如何在两个不同的文件中使用命名空间
- 如何跨多个文件跨越 javascript 命名空间
- 如何在 i18next 中使用多个命名空间
- 如何在同一个名称中创建两个不同的命名空间空间,避免覆盖第一个
- 多个javascript命名空间
- 使用bootstrap将页面拆分为两个垂直空间
- 使用两个命名函数,或者一个带条件语句
- Javascript命名空间-多个级别
- 如何将Ember路由拆分为多个命名空间
- NodeJS -多个对象在多个文件中拆分,但在相同的命名空间中
- 自动填充两个元素之间的空间,最小长度
- 两个元素之间的不间断空间
- 合并两个对象并重命名相同的属性
- 如何将命名空间的两个实例传递给插件选项