2

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

Test = require "test.js"

Test.start()

其中 start 是测试类的方法。

这可能吗?

4

3 回答 3

4

这可能吗?

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

于 2013-03-06T14:15:50.507 回答
3

我发现在浏览器环境中使用 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函数以及CommonJS 模块正常工作的一些变量)exportsmodule.exports

于 2013-03-06T14:24:04.190 回答
2

看看stitchhem(灵感来自stitch,但有更简洁的功能)和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 库作为代码的外部依赖项,有关更多详细信息,请参阅文档)。

于 2013-03-06T14:24:21.987 回答