Node.js 使脚本与浏览器和节点(npm)配合使用
我有一个javascript库,基本上到目前为止它的结构是这样的:Node.js 使脚本与浏览器和节点(npm)配合使用,node.js,package,npm,Node.js,Package,Npm,我有一个javascript库,基本上到目前为止它的结构是这样的: var Ns = (function(){ var that = {}; // add stuff to 'that' return that; })(); //use Ns.foo() and Ns.bar() 现在的问题是,我希望相同的库可以与node和npm一起使用。到目前为止,我能想到的是: this.Ns = (function(){ //same as previous snippet })()
var Ns = (function(){
var that = {};
// add stuff to 'that'
return that;
})();
//use Ns.foo() and Ns.bar()
现在的问题是,我希望相同的库可以与node
和npm
一起使用。到目前为止,我能想到的是:
this.Ns = (function(){ //same as previous snippet })()
//use Ns.foo() and Ns.bar()
问题是,虽然这在浏览器中有效,但在节点中,我需要执行以下操作:
var Ns = require('ns').Ns
问题:我希望能够做到
var Ns=require('Ns')
但为了做到这一点,我必须导出this.foo
和this.bar
,这将打破浏览器的包容性。想法?创建作用域可能是最好的选择(这样就不会出现名称冲突问题),但更简单的方法是通过污染全局作用域,如下所示:
// create local scope.
(function () {
var myModule = ...
// check for node module loader
if (typeof module !== "undefined" && typeof require !== "undefined") {
module.exports = myModule;
} else {
window["name"] = myModule;
}
})();
而不是
var x = require('x');
写
同样,在添加到导出之前,请检查该对象是否存在:
if (typeof exports !== "undefined)
exports.my_func = my_func;
不过,这样做的后果是,在浏览器版本中,所有内容都被转储到全局范围中。此外,它假定浏览器版本将必要的脚本加载到页面中。易于在小范围内工作。。。但我猜它不会很好地扩展
if (typeof exports !== "undefined)
exports.my_func = my_func;