2013-10-31 36 views
3

我正在运行Node.js 0.10.21。我尝试了两种CoffeeScript 1.6.3,并且都使用和不使用require('coffee-script/extensions')。将这两个文件编译为JavaScript并直接在Node中运行它们当然很好。不能要求本地的CoffeeScript模块

# ./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) 
+0

尝试的Node.js 0.8.26为好。同样的结果。 – superlukas

回答

13

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

的解决方案是:

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

或者,你可以简单地做到这一点(这是我一贯的偏好):

require('coffee-script/register'); 

发生了什么事是,CoffeeScript的1.7,a breaking change was introduced

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

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

阅读关于此处:https://github.com/jashkenas/coffee-script/pull/3279

1

在我的计算机上重新创建coffee folder/a.coffee工作得很好。

我认为,加入“./”在在文件a.coffee的要求一开始可能会有帮助:

​​

你也可以尝试以要求绝对路径的文件,只是为了检查他们可以访问。

+0

不,''/'不起作用。我认为你使用的是CoffeeScript 1.6.3?你介意分享你使用的Node版本吗? – superlukas

+0

节点:v0.10.21,咖啡脚本:1.6.3 –

0

brew reinstall node诀窍。不知道为什么。

0

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

npm install --save-dev coffee-script 
node -v # v0.10.31 
0

当心的路径,他们相对于脚本,你正在运行,而不是当前文件夹。 所以,如果你运行

coffee folder/a.coffee 

和你的模块在文件夹中,需要导入./b.coffee./folder/b.coffee