Javascript 处理node.js中“exports”的建议

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.js吸引我的地方之一是将其用作命令行工具

理论上,我可以用Javascript编写库,并将它们放在我的
~/.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 );