有没有办法为require注册新的CoffeeScript扩展?

时间:2013-06-25 09:58:26

标签: node.js coffeescript require file-extension

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

但是,当调用require "test.coffee.unit"节点将文件解释为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?

1 个答案:

答案 0 :(得分:1)

您有两种选择。

  1. 修改coffee-script来源。
  2. 提取您需要的部分内容,并修改它们以在不同的范围内工作。
  3. 对于其中一种,您需要参考section-19 of the coffee-script node module

    相关代码显示了如何配置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})
    

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