javascript - node.js中处理 `exports`的建议

标签 javascript node.js this require

理论:

node.js 吸引我的地方之一是将它用作命令行工具。

理论上,我可以用 Javascript 编写库并将它们放在我的 ~/.node_libraries 目录中,然后我可以重用这些库。

例如,我在 ~/.node_libraries 中有一个 text.js,它有一堆我反复使用的与文本相关的函数 (depunctuate()tokenize_text() 之类的东西)。

这样做的好处是我可以在我的命令行脚本和服务器端使用相同的 text.js 文件。现在我正在使用 Python 进行所有文本处理工作,但我只想坚持使用一种语言。

练习:

AFAICT,为了创建一个 node.js 模块,我必须将我想要的所有内容附加到 exportsthis。即,在 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/

相关文章:

c++ - 在 C++ 中使用 "This"指针

c# - Stylecop 告诉我添加这个关键字,但它是多余的 - 对性能有影响吗?

javascript - 获取div的值并解析为整数以进行计算

javascript - 在 Google Maps API v3 上调用 setContent() 时,InfoWindow 闪烁

javascript - 集成 Google map 搜索表单

javascript - 在 Cloud Firestore onCreate 触发器中运行批处理或事务

node.js - Node 未找到全局模块

javascript - NodeJS 使用sequelize 发布数据

c++ - 连接功能

javascript - 使用ajax更新MySQL数据库