【问题标题】:Using RequireJS in NodeJS with CoffeeScript without transpilation在 NodeJS 中使用 RequireJS 和 CoffeeScript 而不进行编译
【发布时间】:2013-10-14 10:29:43
【问题描述】:

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

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

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

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

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

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

已解决

在这一切之后,我决定采用完全相反的方法。 Use the require for the browser side 也是,所以我不需要为服务器代码更改任何内容。

【问题讨论】:

    标签: javascript node.js coffeescript requirejs


    【解决方案1】:

    相关(我的问题):how can I get connect-assets to recompile my coffee files when they change?

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

    最后,我决定使用gruntgrunt-contrib-watchgrunt-contrib-coffee 提供 js 文件并在它们发生变化时构建它们。这样做的好处是,如果您在特定的 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

    【讨论】:

    • 抱歉,我问的不是这个。我知道 grunt 并且特别说过,我不想仅仅为了满足 RequireJS 就转译这些文件。为了检查错误,我有 SublimeText,在磁盘上检查转译的 JS 文件没有意义,这很麻烦。 require 调用的问题是它从文件系统获取文件,所以没有连接中间件可以帮助解决这个问题。
    • 连接资产可以实现您想要的,我将其放在第二行。我只是告诉你,这并不如你所愿。
    • 我真的不明白你的意思是如何使用它。请查看simple example我制作的,fork 给我看看。
    • 试试这个示例应用程序:github.com/Hoverbear/Angular-Coffee-Express。我已经有一段时间没有使用连接资产了,我试图分叉你的代码并让它与 CA 一起工作,但不能:( Hoverbear 无论如何都设置好了。一件重要的事情:你在任何地方都不需要 js ,包括您的“启动”文件。一直是咖啡。
    • 你显然没有理解我的意思;)他没有在任何地方使用 RequireJS。这是这个问题的主要处理。我知道节点可以像这样使用咖啡脚本。顺便看看他的README,他在运行前将server.coffee转译成js文件。
    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2011-07-08
    • 2014-03-29
    • 1970-01-01
    • 2014-07-22
    相关资源
    最近更新 更多