咖啡脚本模块如何工作?

时间:2013-11-04 09:29:13

标签: node.js coffeescript

出于好奇,咖啡脚本模块如何处理需要'xxx'? 它必须在节点加载之前编译所需的文件...它是否具有针对'require'函数的特定处理?

感谢。

2 个答案:

答案 0 :(得分:1)

看起来这一切都在这里处理:

https://github.com/jashkenas/coffee-script/blob/master/src/extensions.coffee

利用节点register extensions that runs a callback when loaded.的能力现在看来已经弃用了,但功能仍然存在且有效。

它也有其他功能,包括一些粗略的monkeypatching,但这里是最相关的片段:

# Load and run a CoffeeScript file for Node, stripping any `BOM`s.
loadFile = (module, filename) ->
  answer = CoffeeScript._compileFile filename, false
  module._compile answer, filename

# If the installed version of Node supports `require.extensions`, register
# CoffeeScript as an extension.
if require.extensions
  for ext in CoffeeScript.FILE_EXTENSIONS
    require.extensions[ext] = loadFile

答案 1 :(得分:0)

所以,如果我有一个带有

行的coffee文件
x = require './ls.coffee'

直接用咖啡运行,例如coffee foo.coffeels.coffee加载了咖啡扩展程序(已编译并运行)。

但是,如果我编译该脚本coffee -c foo.coffee,并使用节点node foo.js运行它,则会出错。节点不再具有require扩展集,并且它看到的只是Coffeescript代码。