1

出于好奇,coffee-script 模块如何处理 require 'xxx'?它必须先编译所需的文件,然后节点才能加载它......它是否对'require'函数有特定的处理?

谢谢。

4

2 回答 2

1

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

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

这利用了节点注册在加载时运行回调的扩展的能力。现在似乎已弃用此功能,但该功能仍然存在并且可以正常工作。

它也做其他事情,包括一些粗糙的猴子补丁,但这是最相关的片段:

# 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
于 2013-11-04T09:49:14.537 回答
0

所以如果我有一个coffee文件与该行

x = require './ls.coffee'

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

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

于 2013-11-07T07:09:25.527 回答