3

我目前正在调用我的测试文件,例如test.coffee.unit单元测试......(产生输出test.spec.unit

但是,当调用require "test.coffee.unit"node 时,会将文件解释为 javascript 并且无法评估。我一直在查看文档和https://github.com/jashkenas/coffee-script/blob/master/lib/coffee-script/coffee-script.js#L192看看我是否能找到办法,但是我没有看到任何看起来很有希望的东西。

我还查看了https://github.com/joyent/node/blob/master/lib/module.js#L347http://nodejs.org/api/modules.html#modules_all_together看看我能做什么从中收集...

概括:

有没有办法注册.coffee.unit或只是.unit扩展,以便require将其评估为 CoffeeScript?

4

1 回答 1

1

你有两个选择。

  1. 修改coffee-script源。
  2. 提取您需要的源代码部分,并修改它们以在不同的范围内工作。

对于任何一个,您都需要参考模块第 19 节coffee-script node

相关代码展示了如何配置 require 扩展:

if require.extensions
  for ext in ['.coffee', '.litcoffee', '.coffee.md']
    require.extensions[ext] = loadFile

代码coffee-script用于加载文件:

loadFile = (module, filename) ->
  raw = fs.readFileSync filename, 'utf8'
  stripped = if raw.charCodeAt(0) is 0xFEFF then raw.substring 1 else raw
  answer = compile(stripped, {filename, sourceMap: true, literate: helpers.isLiterate filename})
  sourceMaps[filename] = answer.sourceMap
  module._compile answer.js, filename

您需要跟踪依赖关系。大多数都在coffee-script模块的出口上。例如,

compile(stripped, {filename, sourceMap: true, literate: helpers.isLiterate filename})

cs = require 'coffee-script'
cs.compile(stripped, {filename, sourceMap: true, literate: cs.helpers.isLiterate filename})

非常欢迎使用完整的解决方案编辑此答案。

于 2013-06-25T10:27:26.027 回答