【问题标题】:Include CoffeeScript classes like in node.js在 node.js 中包含 CoffeeScript 类
【发布时间】:2013-03-06 14:03:14
【问题描述】:

我刚刚开始使用 CoffeeScript,但我已经被课程卡住了。 我想让我的文件像节点一样结构化,这样我就可以需要一个包含这样的类的 JavaScript 文件。

Test = require "test.js"

Test.start()

其中 start 是测试类的方法。

这可能吗?

【问题讨论】:

  • like in node”是什么意思,你尝试在浏览器中还是在 Node.js 中执行你的咖啡脚本?
  • 我在浏览器中执行,但是require函数不起作用。
  • 当然不是,浏览器环境中没有require
  • 有什么办法可以达到类似的效果吗?

标签: javascript coffeescript require


【解决方案1】:

这可能吗?

与 Node.js 中的不完全一样。浏览器环境中没有同步的require。但是,您可以尝试使用众多异步库之一来执行此操作,请查看 AMD。最著名的实现是require.js

【讨论】:

  • 谢谢,这正是我想要的。
  • No. There is no synchronous require in browser environments -- 错误。但是您应该将所有代码捆绑在一起以使同步要求可行。 Stitch、hem 和 browserify 使用这种方法。
  • @nl_0:当然,browserify 和 co 可以获取需要同步的代码并将其转换为异步代码,但您几乎无法从浏览器同步加载文件。
  • @Bergi,是的,没错,但是 OP 没有询问有关同步与异步的任何问题。在我看来,他们只是想知道是否可以在浏览器中使用 Node.js 样式的模块。所以回答“这可能吗?” -> “不”对我来说似乎不对。
  • @Bergi "browserify 和 co 可以获取需要同步的代码并将其转换为异步代码" -- 不,它不会转换为异步,而是异步加载包,并且所有requires 之后同步工作。 “您几乎无法从浏览器同步加载文件”——正确。
【解决方案2】:

我发现在浏览器环境中使用 CommonJS 模块(Node.js 使用的模块)的最简单方法是使用Browserify。我个人也更喜欢 CommonJS 模块定义而不是 AMD 模块定义,但这只是个人喜好。

另外,请注意,为了导出您的类以便 require 'test' 直接为您提供类构造函数,您必须将您的类分配给 module.exports

# In test.coffee
module.exports = class Test 
  @start = -> console.log 'start!'

然后将该文件编译为test.js,您就可以使用它了:

Test = require './test'
Test.start()

在 Node.js 中,这将正常工作。在浏览器中,您需要先使用 Browserify(或其他工具)处理文件以使其正常工作(它将创建正确的 require 函数以及一些 exportsmodule.exports 变量以使 CommonJS 模块工作正确)。

【讨论】:

  • 你混淆了 RequireJS 和 CommonJS。 Node 使用 CommonJS,而 RequireJS 是最流行的 AMD 实现。
  • 是的,完全搞砸了。我一直在想 CommonJS。希望你不介意我更新它。
【解决方案3】:

看看stitchhem(它的灵感来自缝合,但功能更简洁)和browserify

就个人而言,我更喜欢下摆。你可以用它做这样的事情:

# app/lib/model.coffee

module.exports = class Model
  ...

.

# app/lib/util.coffee

helper1 = -> ...

helper2 = -> ...

module.export = {helper1, helper2}

.

# app/index.coffee

Model = require 'lib/model'
{helper1} = require 'lib/util'

# do whatever you want with required stuff
...

Hem 负责即时编译 CoffeeScript 并将所有需要的代码捆绑在一起(它还支持 npm 模块和任意 js 库作为代码的外部依赖项,请参阅文档了解更多详细信息)。

【讨论】:

  • 大声笑,我们的答案只相差 10 秒 xD。我喜欢您提供的替代方案不仅仅是 Browserify。我对 Stitch 的体验并不是最好的(不过我很久以前就尝试过,所以它可能有所改进)。
  • =) 我记得,针迹几乎被废弃了,但我认为下摆是它的继承者,具有更多功能和一些额外的整洁
  • 感谢您提供有用的信息。也许我将来会检查下摆。 +1 :)
猜你喜欢
  • 2013-08-08
  • 2012-05-05
  • 2013-10-28
  • 2016-11-24
  • 2012-08-31
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多