【问题标题】:Coffeescript and node-supervisor together?Coffeescript 和节点主管在一起?
【发布时间】:2011-12-23 17:55:22
【问题描述】:

我正在使用带有 --watch 选项的咖啡脚本来重建 .coffee 文件更改的 JavaScript。

将它与 node-supervisor 结合以在更改已编译的 javascript 时重新启动 Node 是否安全?

我担心当咖啡脚本重新编译多个文件时,它会因为原子性而变得不健壮。 node-supervisor 可以在检测到第一个文件系统更改时开枪并重新启动 Node。它是否足够健壮,可以在忙于重新启动 Node 时意识到还有其他更改?

有没有更好的方法?理想情况下,我只有一个文件系统观察程序重新编译我的咖啡脚本并重新启动节点。

【问题讨论】:

标签: node.js coffeescript


【解决方案1】:

创建一个 JavaScript 启动器,即run.js,如下所示:

require('coffee-script');
require('./launch');

然后使用主管和适当的选项运行此文件:

supervisor -e "node|js|coffee" run.js

这对我在 Windows 上很有效。

【讨论】:

  • 无需创建单独的js文件。您可以使用-x 选项指定可执行文件。见my answer
【解决方案2】:

你可以使用nodemon,它甚至还有延迟功能(经过几秒后重启服务器),例如:

nodemon --debug ./server.coffee 80

nodemon 的另一个好特性是忽略文件,例如:

# this is my ignore file with a nice comment at the top

/vendor/*     # ignore all external submodules
/public/*     # static files
./README.md   # a specific file
*.css         # ignore any CSS files too

除此之外,请阅读 github repo 上的文档并观看有关 nodemon 的 Nodetuts 视频:http://nodetuts.com/tutorials/14-some-nodejs-tools.html

【讨论】:

  • 谢谢,我不知道延迟功能。我会玩这个。
  • 请注意,默认情况下,nodemon 会忽略 .coffee 文件 exceptiong 指定的应用程序文件。所以如果你不预编译你的 .coffee 文件,你就会遇到问题。我通过将 .nodemonignore 文件添加到项目根目录来解决它,它重写了默认规则并且 nodemon 开始监视所有必需的 .coffee 文件
  • 我必须在 --debug 之前添加 --nodejs 才能让它与 coffeescript 一起工作: nodemon --nodejs --debug ./server.coffee
【解决方案3】:

您可以将supervisor-x 选项设置为coffee 一起使用。这将使它能够运行具有正确可执行文件的脚本:

supervisor -x coffee your-script.coffee

灵感来自Lemming's answer

【讨论】:

    【解决方案4】:

    在我的一些 Cakefiles 中,例如 connect-assets 的文件,我自己观察并在每次发生变化时简单地生成 coffee -co lib src,然后在该子进程完成时重新启动服务器。这绕过了原子性问题。如果每个.coffee 文件一次更改(或者如果您升级coffee 运行时),所有JS 文件也将一次更新。

    【讨论】:

    • 不错!我什至还没有完全理解你的蛋糕文件。但这看起来是个好主意。
    【解决方案5】:

    我的以工头为中心的解决方案如下所示:

    Procfile.dev

    web: ./node_modules/supervisor/lib/cli-wrapper.js -n exit server.js
    watch: ./node_modules/iced-coffee-script/bin/coffee --watch --compile server.iced
    

    然后只是foreman start -f Procfile.dev

    然后gitignore 生成.js 文件。我喜欢这种方法,因为它在我的 .iced 文件旁边保留了一个不断更新的 vanilla JS 文件,所以我可以随时仔细检查我的工作(我肯定会在咖啡脚本中犯错误,而我可能不会在 vanilla 中犯)。

    【讨论】:

    • 这很好,但我似乎无法使用 --debug 运行节点主管
    猜你喜欢
    • 2012-02-18
    • 2015-01-30
    • 2020-04-10
    • 1970-01-01
    • 2021-12-12
    • 2012-12-22
    • 1970-01-01
    • 2019-01-21
    • 2022-01-01
    相关资源
    最近更新 更多