跨平台的javascript命名空间

时间:2012-05-14 15:58:39

标签: javascript node.js commonjs javascript-namespaces js-amd

我正在尝试编写一个可以加载的javascript模块:

  • 通常在浏览器中(脚本标记)
  • 在使用requirejs(AMD)的浏览器中
  • in node.js

我相信它几乎是正确的,但是我不确定它在node.js中应该如何工作,因为我没有使用它。

目标:

  • 创建包含内容的命名空间
  • 从其他javascript文件向该命名空间添加方法/属性

更具体地说,我想创建一个名为“myns”的命名空间:

  • “myns-before.js”会添加“之前”属性
  • “myns.js”会添加“hello”属性
  • “myns-after.js”会添加“after”属性

代码如下所示:

myns名字-before.js:

(function(exports) {
    exports.before = "myns before";
    if (typeof define === 'function' && define.amd) {
        define('myns-before', exports);
    }
})(typeof exports !== 'undefined' ? exports : this['myns'] = this['myns'] || {});

myns.js:

(function(exports) {
    exports.hello = "Hello myns";
    if (typeof define === 'function' && define.amd) {
        define('myns', exports);
    }
})(typeof exports !== 'undefined' ? exports : this['myns'] = this['myns'] || {});

myns名字-after.js:

(function(exports) {
    exports.after = "myns after";
    if (typeof define === 'function' && define.amd) {
        define('myns-after', exports);
    }
})(typeof exports !== 'undefined' ? exports : this['myns'] = this['myns'] || {});

然后我会以不同的方式对这3个脚本进行说明。

1。在普通浏览器中:

<body>
<script src="myns-before.js"></script>
<script src="myns.js"></script>
<script src="myns-after.js"></script>
<script>
console.log("myns before:", myns, myns.before);
console.log("myns:", myns, myns.hello);
console.log("myns after:", myns, myns.after);
</script>
</body>

2。在浏览器中作为AMD模块:

<body>
<script src="libs/require.js"></script>
<script>
require(["myns-before", "myns", "myns-after"], function(myns){
    console.log("myns before:", myns, myns.before);
    console.log("myns:", myns, myns.hello);
    console.log("myns after:", myns, myns.after);
});
</script>
</body>

第3。在node.js中:

var myns1 = require('./browsers/myns-before');
var myns2 = require('./browsers/myns');
var myns3 = require('./browsers/myns-after');
console.log(">", myns1, myns1.before, myns1.hello, myns1.after);
console.log(">", myns2, myns2.before, myns2.hello, myns2.after);
console.log(">", myns3, myns3.before, myns3.hello, myns3.after);

所以,在前2个案例(浏览器lodaed)中,我可以正确输出:myns.before,myns.hello和myns.after

但是在node.js中,我没有找到实现相同目标的方法。 似乎我只能逐个加载脚本,每个脚本都设置为一个变量。

所以问题是,如何在node.js中加载需要在浏览器中工作的这3个脚本,并能够输出我的3个属性:before,hello和after?

有什么想法吗?

0 个答案:

没有答案