在 NodeJS 中使用 RequireJS 和 CoffeeScript 无需转译



可能很简单的问题,但到目前为止我还没有找到任何可行的解决方案。目前,我可以纯粹从咖啡文件运行服务器,甚至摩卡测试也能够处理咖啡文件。但是 RequireJS 仍在寻找 *.js 文件 :/我对仅仅为了满足 RequireJS 而进行转译感觉不佳。

使用NodeJS扩展可能更简单的方法,但由于它已被弃用,这不是一个好方法。我正在考虑这样的解决方案:

requirejs.config({
    nodeRequire: require,
    compilers: [
        {
            extensions: ['.coffee','.litcoffee','.coffee.md']
            compiler: require('coffee-script').compile
        }
    ]
})

它只会查找具有这些扩展名的文件,并在找到后对其进行编译。否则保留默认行为。当然,在寻找这些文件时,这意味着一些性能问题,但由于它仅用于开发,因此我认为没有大问题。

不幸的是,我很难理解 RequireJS 如何在引擎盖下工作。否则我会尝试制定出这样的解决方案。

我缺少其他解决方案吗?

解决

在所有这些之后,我决定采取完全相反的方法。也对浏览器端使用require,所以我不需要为服务器代码更改任何内容。

相关(我的问题(:当咖啡文件发生变化时,如何获得连接资产来重新编译它们?

这可以通过连接资产来实现。这是位于请求和资产之间的层,并按需编译它们。我尝试走这条路,发现它有很多工作 - 经常遇到连接无法将咖啡正确编译为js的情况。或者什么,我可能做错了,因为我当时是 node 的新手。此外,我对在生产中依赖这样的资产层也很不舒服。

最后,我决定提供js文件,并在它们使用grunt,grunt-contrib-watch和grunt-contrib-coffee更改时构建它们。这样做的好处是,如果您在特定的js行上遇到错误,则可以打开文件并查看失败的行。如果你是 coffeescript 的新手,你偶尔会做错,最终得到一些古怪的 JavaScript。能够拉起 js 文件并查看它很有帮助。

在构建 Web 应用程序时,有很多类似的任务需要自动化,因此在许多情况下,grunt 是一个有用的工具。这是我的建议。

这是我的咕噜声设置示例:

  # Project configuration.
  grunt.initConfig
    watch:
      coffee:
        files: ['app/assets/src/coffee/**/*.coffee', 'app/assets/src/coffee/*.coffee', 'app/webserver.coffee']
        tasks: ['coffee:dev', 'replace', 'test']

通过此设置(并非全部在这里(,我可以转译我所有的咖啡文件,运行我所有的测试,对一些文件执行一些文本操作,并在 2 秒内拥有一个干净且准备就绪的 Web 应用程序。

Require需要一点时间来了解您的头脑,但总而言之,它只是在本地(客户端(查看它是否有库,如果没有,它会从服务器获取它。它不会做任何转译,如果你愿意的话,这似乎有点超出它的"任务参数"。Require就像汽车配件店的零件师:它检查前台是否有工具;是的,它把它交给你;不,它去得到它。

如果您只想在节点中使用咖啡而不对其进行转译,请尝试 require-cs。

最新更新