【问题标题】:Coffee script compilation咖啡脚本编译
【发布时间】:2011-06-30 23:11:02
【问题描述】:

我正在寻找最简单的方法来自动将咖啡脚本重新编译成 JS。

阅读documentation,但仍然无法获得我想要的东西。

我需要它来监视文件夹src/ 中的任何*.coffee 文件修改并将它们编译成连接的javascript 文件到lib/something.js

不知何故不能将观察、编译和连接结合在一起。 :/

【问题讨论】:

标签: javascript compilation coffeescript


【解决方案1】:

咖啡脚本文档为此提供了一个示例:

观察文件的变化,并在每次保存文件时重新编译:

coffee --watch --compile experimental.coffee

如果你有一个特定的脚本要执行,你可以使用 linux 命令 dnotify: http://linux.die.net/man/1/dnotify

dnotify --all src/ --execute=command

编辑: 我在 dnotify 的 --execute 部分遇到了一些问题 - 可能是一个错误,但这就是我的工作:

dnotify --all . -e `coffee -o lib/ --join --compile *.coffee`

每次修改文件时执行编译命令。

如果你在命令后面加上一个 & 符号,像这样:

dnotify --all . -e `coffee -o lib/ --join --compile *.coffee` &

它将在一个单独的进程中启动。要获取进程 ID,您可以使用以下命令:

ps ux | awk '/dnotify/ && !/awk/ {print $2}'

然后,您可以使用以下方法终止该进程:

kill `ps ux | awk '/dnotify/ && !/awk/ {print $2}'`

但如果这是您的目标(按进程名称杀死),您可以使用以下方法以更简单的方式完成:

killall dnotify

【讨论】:

  • 是的。管理编译1个文件。有多个问题。我猜coffee -o lib/ --join --compile src/*.coffee + dnotify 可以解决问题。
  • 我认为应该,但无法弄清楚。 :)
  • 我编辑了我的问题以包含该命令。我看到您还添加了自己的答案,这可能也可以:)
  • @arnorhs 是的。问题解决了。我真的不熟悉这一切,包括一般的linux。感谢您的帮助。
  • 我以前从未尝试过咖啡脚本,它看起来很有趣。所以谢谢你向我介绍它:)
【解决方案2】:

改变了关于串联的想法。
创建了一个小的 compiler.sh 文件,其中包含:

dnotify -M src/ -e coffee -o lib/ -c src/ &
dnotify -M spec/ -e coffee -o lib/ -c spec/ &

一种适合我的需要。

【讨论】:

  • 不错。您不必在这些命令上附加一个 & 以便它们都被执行吗?它的设置方式,只有第一个会被执行,脚本会等到命令退出。获取进程 ID 可能也是一个好主意,这样您以后就可以停止进程...
  • @arnorhs 另一个新手问题 - 如何获取 pid? :)
  • 你可以这样做:ps ux | awk '/dnotify/ && !/awk/ {print $2}' 这将显示在他的机器上运行的所有 dnotify 进程的进程 ID。所以你可以调用:kill ps ux | awk '/dnotify/ && !/awk/ {print $2}'
【解决方案3】:

您的问题的简短回答是 coffee 实用程序不是为此而设计的;结合文件监视和连接实际上非常复杂。期待在不久的将来为 CoffeeScript 提供更复杂的构建工具;在那之前,您可能希望通过编写 Cakefile 或 Ruby Watchr 脚本来构建您的项目。然后,您还可以添加缩小、文档生成以及您特定项目所需的任何其他内容(更不用说保证特定的串联顺序)。

【讨论】:

    【解决方案4】:

    coffee --watch 有两个主要缺陷:

    • 发出命令后创建的新文件未被监视
    • 需要手动启动,所以你可能会忘记这样做,这听起来并不比忘记在你之前编译更聪明git commit

    我想出的解决方案是一个相当简单的 Bash 脚本,它需要 coffee --watch 进一步几步,这将允许你的工作目录树在系统登录后被监视,并在每个文件保存时自动编译成 JavaScript/改变 或创建新文件:

    http://blog.gantrithor.com/post/11609373640/carefree-coffeescript-auto-compiler

    可能有更优雅的方式来做到这一点,但这个实现效果很好 =)

    【讨论】:

      【解决方案5】:

      试试抖动

      https://github.com/TrevorBurnham/jitter

      它监视一个 .coffee 文件的目录,当它检测到一个文件已更改时,它会自动将其重新编译为 .js

      抖动 /path/to/coffee/dir /path/to/js/dir

      我一直在尝试使用 coffescript 和 sencha touch 的项目,它似乎工作得很好。不处理串联问题,但对于只需要自动编译的人来说使用起来非常简单。

      【讨论】:

        【解决方案6】:
        find -type f | grep .coffee | xargs ls -t | head -n 1 | xargs coffee -cw
        

        找到最后修改的咖啡脚本并将其置于编译监视模式

        【讨论】:

          【解决方案7】:

          比 /src 高一级,这将适用于所有找到的 .coffee 文件,无论深度如何。

          coffee -w -c src/
          

          【讨论】:

          • 我遇到过如果 node_modules 包含在同一个目录中的情况,我会遇到这个错误:github.com/jashkenas/coffee-script/issues/2004
          • 这和看的文件太多有关,我不明白这是怎么让我的回复出错的。
          【解决方案8】:

          我发现命令行 coffeescript 编译器不太适合复杂的项目结构。

          如果您和您的构建过程和我一样需要,请查看 Grunt - http://gruntjs.com/

          它允许高度复杂的构建过程 - 例如,您可以

          1. 将咖啡连接到新文件
          2. 编译
          3. 连接一些额外的 JS
          4. 缩小

          任务可以串在一起,监视的文件/文件夹也可以高度自定义。

          【讨论】:

            【解决方案9】:

            nodemon -x coffee server.coffee 为我做。

            使用npm install -g nodemon安装nodemon

            【讨论】:

              【解决方案10】:
              find `pwd` | grep .coffee | xargs coffee -w -c
              

              在应用的根目录试试这个

              【讨论】:

                【解决方案11】:

                这对我有帮助(-o 输出目录,-j 加入 project.js,-cw 编译并深入观察咖啡脚本目录):

                coffee -o web/js -j project.js -cw coffeescript
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-06-04
                  • 2012-07-23
                  • 2012-01-25
                  • 2014-12-12
                  • 2013-06-26
                  • 2013-02-04
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多