不能要求本地CoffeeScript模块

时间:2013-10-31 21:11:52

标签: node.js coffeescript

我正在运行Node.js 0.10.21。我尝试了两种CoffeeScript 1.6.3并且使用和不使用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)

5 个答案:

答案 0 :(得分: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 :(得分:1)

在我的计算机上重新创建coffee folder/a.coffee非常合适。

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

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

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

答案 2 :(得分:0)

brew reinstall node完成了这个伎俩。不知道为什么。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

coffee folder/a.coffee

并且您的模块位于文件夹中,您需要./b.coffee而不是./folder/b.coffee