3

我正在运行 Node.js 0.10.21。我尝试了 CoffeeScript 1.6.3 和 master 有和没有require('coffee-script/extensions'). 将这两个文件编译为 JavaScript 并直接在 Node 中运行它们当然工作得很好。

# ./folder/a.coffee
require('../b').test()

# ./b.coffee
exports.test = -> console.log 'yay'

# $ coffee folder/a.coffee
#
# Error: Cannot find module '../b'
#   at Function.Module._resolveFilename (module.js:338:15)
#   at Function.Module._load (module.js:280:25)
#   at Module.require (module.js:364:17)
#   at require (module.js:380:17)
#   at Object.<anonymous> (/Users/test/folder/a.coffee:1:1)
#   at Module._compile (module.js:456:26)
4

5 回答 5

13

我在尝试为 CoffeeScript版本 1.7.1解决这个问题时发现了这个 SO question 。它不适用于 OP 的 1.6.3 版,但它可能会在 2014 年及以后帮助其他人解决此问题。

解决方案是:

 var foo = require('coffee-script/register');
 foo.register();

或者,您可以简单地这样做(这是我通常的偏好):

 require('coffee-script/register');

正在发生的事情是,对于 CoffeeScript 1.7,引入了重大更改

它解决了在您可能正在加载或正在加载的依赖项集中使用各种咖啡脚本版本的情况。

这个想法是任何特定的模块(或子模块)应该能够被它兼容的咖啡脚本版本编译。

在这里阅读:https ://github.com/jashkenas/coffee-script/pull/3279 。

于 2014-02-02T18:48:31.670 回答
1

在我的电脑上重新创建,coffee folder/a.coffee效果很好。

我认为在文件 a.coffee 的 require 开头添加 './' 可能会有所帮助:

require('./../b').test()

您也可以尝试通过绝对路径要求文件,只是为了检查它们是否可访问。

于 2013-10-31T21:50:55.940 回答
0

brew reinstall node成功了。不知道为什么。

于 2013-10-31T22:24:29.293 回答
0

您不需要重新安装节点。只需添加咖啡脚本作为依赖项

npm install --save-dev coffee-script
node -v # v0.10.31
于 2014-11-13T22:05:18.827 回答
0

注意路径,它们与您正在运行的脚本相关,而不是您当前的文件夹。所以如果你跑

coffee folder/a.coffee

./b.coffee并且您的模块在文件夹中,您不需要./folder/b.coffee

于 2015-11-09T21:30:22.633 回答