1

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

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

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

它只会查找具有这些扩展名的文件,并在找到后对其进行编译。否则保持默认行为。当然,这意味着在查找这些文件时会出现一些性能问题,但由于它仅用于开发,所以我看不出有什么大问题。

不幸的是,我很难理解 RequireJS 在后台是如何工作的。否则我会尝试制定一些这样的解决方案。

我还缺少其他解决方案吗?

解决了

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

4

1 回答 1

0

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

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

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

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

这是我的 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

于 2013-10-09T17:15:20.090 回答