【问题标题】:Writing modular ECMAScript that runs in browsers AND in node.js编写在浏览器和 node.js 中运行的模块化 ECMAScript
【发布时间】:2016-05-06 07:02:29
【问题描述】:

我不熟悉 Javascript 和 node.js 的繁重工作。我一直在用 Web Audio Api 编写一些客户端的东西,所有的都是快速而肮脏/单片的实验,但现在我想做一些实际的项目。我不喜欢浏览器测试这件事,而且我听说很多人使用 node 进行测试,所以我也想做同样的事情,使用 grunt 进行自动化。这部分是为了让我可以将我的代码分解成许多可测试的小块,然后可以将它们收集成一两个大块并提供服务。

到目前为止,我只是将我的 javascript 拆分为文件并在 body 标记的底部按顺序导入它。 Obvs 这适用于小型客户端项目,但不可扩展。

我更习惯于使用几乎所有其他语言中的导入机制,以及 node.js 所具有的。但是,浏览器不知道 export 或 module.exports,一旦看到它就会呕吐。

我想到了两个明显的解决方案,但对我来说都觉得很臭......

1) 放出口 = module.exports = {};在每一页的头部。

2) 一起编译所有文件时查找并删除这些导出声明。

这些都不是好的解决方案。

在 JS 中制作模块化代码时,我应该了解哪些规范的解决方案/模式?如果没有,有没有人有一个适度优雅的?如果失败了,有没有人有一个不会太糟糕的人!?我应该学习RequireJS吗? ES6 模块会解决这个问题吗?如果是,我应该等待更好的支持吗?很抱歉一次问这么多问题,事实证明 JS 生态系统既令人兴奋又令人困惑!

【问题讨论】:

  • 查找 Browserify。它允许您使用 CommonJS (var thing = require('./thing.js')) 将代码编译到可以在浏览器中运行的单个文件中。 ES6 模块的目标是最终解决这个问题,是的。
  • 我会研究 Babel 和 ES6。这是未来,AMD(以及所有的垫片)很可能会被淘汰。

标签: javascript node.js ecmascript-6


【解决方案1】:

我一直很喜欢 Kris Kowal 等人的方式。人。在 Q 库中做到了——而他在该部分代码中的 cmets 是无可挑剔的

https://github.com/kriskowal/q/blob/v1/q.js

【讨论】:

  • 做得很好。理想情况下,我希望避免在我制作的每个模块中添加几十行样板代码,但我想按照现状,这是更好的选择之一。
猜你喜欢
  • 2018-07-11
  • 2011-11-11
  • 1970-01-01
  • 2015-12-27
  • 2013-06-24
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多