Javascript 处理node.js中“exports”的建议
理论: node.js吸引我的地方之一是将其用作命令行工具 理论上,我可以用Javascript编写库,并将它们放在我的Javascript 处理node.js中“exports”的建议,javascript,node.js,this,require,Javascript,Node.js,This,Require,理论: node.js吸引我的地方之一是将其用作命令行工具 理论上,我可以用Javascript编写库,并将它们放在我的~/.node_libraries目录中,然后我可以重用这些库 例如,我在~/.node_库中有一个text.js,它有一系列我反复使用的与文本相关的函数(depuncuate(),tokenize_text(),诸如此类) 这样做的好处是,我可以在命令行脚本和服务器端使用相同的text.js文件。现在我正在用Python做所有的文本处理工作,但我想只使用一种语言 实践: AF
~/.node_libraries
目录中,然后我可以重用这些库
例如,我在~/.node_库
中有一个text.js,它有一系列我反复使用的与文本相关的函数(depuncuate()
,tokenize_text()
,诸如此类)
这样做的好处是,我可以在命令行脚本和服务器端使用相同的text.js
文件。现在我正在用Python做所有的文本处理工作,但我想只使用一种语言
实践:
AFAICT,为了创建node.js模块,我必须将我想要的所有东西都附加到exports
或this
。也就是说,在text.js
中,我必须做:
exports.depunctuate = depunctuate
或
如果我使用导出
,我在使用库服务器端时会遇到问题:
<script src=text.js></script>
因为我得到的导出没有定义错误
如果我使用此
,我可以避免错误,但我导出的所有内容最终都会附加到窗口对象
有什么方法可以设置这些库来避免这两个问题吗?例如,是否有某种方法可以包装导出导出的
导出
,从而使变量对节点是明显的,但在服务器上的普通Javascript文件中使用时就不会了?在将内容粘贴到对象中之前,测试导出
对象是否存在如何
到目前为止,这对我来说很有效,但也许有更好的想法:
if(typeof(exports) !== 'undefined' && exports !== null) {
exports.foo = foo;
exports.bar = bar;
}
在CoffeeScript中,可以更简洁地执行此操作:
[exports.foo, exports.bar] = [foo, bar] if exports?
所以这就成了一个名称空间问题。除非使用新运算符调用函数,否则您将获得一个this context===to window(全局)的值。避免这种情况的一种方法是:
(function( exports ) {
/* put your depuncuate definition here to keep it from leaking to the global */
exports.depunctuate = depunctuate;
})( (typeof exports === 'undefined') ? myAppNamespace : exports );
成功了!我要爱你。。。顺便说一句,为什么我不能直接说
如果(导出)
?等等,再想想,我仍然可以进入窗口。取消同步。
(function( exports ) {
/* put your depuncuate definition here to keep it from leaking to the global */
exports.depunctuate = depunctuate;
})( (typeof exports === 'undefined') ? myAppNamespace : exports );