需要()';从JavaScript文件或REPL中删除CoffeeScript文件

需要()';从JavaScript文件或REPL中删除CoffeeScript文件,javascript,node.js,coffeescript,Javascript,Node.js,Coffeescript,我正在使用Node.js,希望将CoffeeScript合并到我的工作流中。我有两个用例: 我希望能够编写JavaScript文件,这些文件require()CoffeeScript模块 我希望能够从节点REPL中加载CoffeeScript模块 对于案例#1:我可以从.coffee编译到.js和require()模块,作为一种变通方法 对于案例2:我现在正在eval()处理coffee script.compile()的输出 有没有更好、更统一的方法来实现这一点?一旦需要,coffee脚本模块

我正在使用Node.js,希望将CoffeeScript合并到我的工作流中。我有两个用例:

  • 我希望能够编写JavaScript文件,这些文件
    require()
    CoffeeScript模块
  • 我希望能够从节点REPL中加载CoffeeScript模块
  • 对于案例#1:我可以从
    .coffee
    编译到
    .js
    require()
    模块,作为一种变通方法

    对于案例2:我现在正在
    eval()
    处理
    coffee script.compile()的输出

    有没有更好、更统一的方法来实现这一点?

    一旦需要,coffee脚本模块就会注册其扩展

    $ echo 'console.log "works"' > module.coffee
    
    $ echo '
    > require("coffee-script")
    > require("./module")
    > ' > test.js
    
    $ node test.js
    works
    
    $ node
    > require('coffee-script'); require('./module')
    works
    {}
    
    编辑:随着CoffeeScript 1.7.0的放松,这种行为发生了变化。现在,您需要执行以下操作:

    require('coffee-script/register');
    

    一个更通用的解决方案是使用

    它允许您
    require()
    CoffeeScript文件,无需预编译。(它还允许您
    require()
    一系列其他文件格式:CoffeeScript、clojurescript、yaml、xml等。)

    对于CoffeeScript,它只需要
    CoffeeScript
    模块

    require('better-require')();
    var myModule = require('./mymodule.coffee');
    var clojurescriptModule = require('./mymodule.cljs');
    // etc.
    

    披露:我写了
    更好的要求

    那咖啡脚本REPL呢,
    咖啡
    ?与节点一相比,REPL非常原始:它缺少颜色、自动完成、多行语句等cupdate:
    咖啡
    REPL现在棒极了:)哈,为什么我没想到呢?:)
    require.extensions
    现在已经被弃用,没有其他选择。我希望它能继续使用,因为它是一个稳定的功能,正如您所提到的,目前还没有其他选择。
    require.extensions
    的核心问题是注册扩展会改变整个应用程序的全局状态,
    better require
    未解决此问题,这意味着,如果您的任何第三方子模块碰巧依赖于不同版本的,例如Yaml或CoffeeScript,则情况会发生变化。better-require默认情况下也不会加载“.litcoffee”模块,而它们可以通过
    require('coffee-script/register')加载
    
    require('better-require')();
    var myModule = require('./mymodule.coffee');
    var clojurescriptModule = require('./mymodule.cljs');
    // etc.