理论:
node.js 吸引我的地方之一是将它用作命令行工具。
理论上,我可以用 Javascript 编写库并将它们放在我的 ~/.node_libraries
目录中,然后我可以重用这些库。
例如,我在 ~/.node_libraries
中有一个 text.js,它有一堆我反复使用的与文本相关的函数 (depunctuate()
、tokenize_text()
之类的东西)。
这样做的好处是我可以在我的命令行脚本和服务器端使用相同的 text.js
文件。现在我正在使用 Python 进行所有文本处理工作,但我只想坚持使用一种语言。
练习:
AFAICT,为了创建一个 node.js 模块,我必须将我想要的所有内容附加到 exports
或 this
。即,在 text.js
中,我必须这样做:
exports.depunctuate = depunctuate
或
this.depunctuate = depunctuate
如果我使用 exports
,我在使用库服务器端 à la 时遇到问题:
<script src=text.js></script>
因为那时我得到exports is not defined错误。
如果我使用 this
,我可以避免错误,但我导出的所有内容最终都会附加到窗口对象。
有什么方法可以设置这些库来避免这两个问题?例如,有没有什么方法可以包装 exports
的导出,这样 var 对 Node 来说是显而易见的,但在服务器上的纯 Javascript 文件中使用时却不是?
最佳答案
在向其中添加内容之前测试exports
对象是否存在怎么样?
到目前为止,这对我来说效果很好,但也许还有更好的想法:
if(typeof(exports) !== 'undefined' && exports !== null) {
exports.foo = foo;
exports.bar = bar;
}
在 CoffeeScript 中,这可以更简洁地完成:
[exports.foo, exports.bar] = [foo, bar] if exports?
关于javascript - node.js中处理 `exports`的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3877398/