出于好奇,咖啡脚本模块如何处理需要'xxx'? 它必须在节点加载之前编译所需的文件...它是否具有针对'require'函数的特定处理?
感谢。
答案 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.coffee
,ls.coffee
加载了咖啡扩展程序(已编译并运行)。
但是,如果我编译该脚本coffee -c foo.coffee
,并使用节点node foo.js
运行它,则会出错。节点不再具有require
扩展集,并且它看到的只是Coffeescript代码。