使用"咖啡"而不是"节点"生产中的命令

时间:2011-09-29 10:52:12

标签: javascript node.js coffeescript

我有一个运行express.js的app.js。

我想将代码转换为coffeescript,并考虑创建一个app.coffee,我将其编译为app.js,以便我可以使用“node app.js”运行它。

但是后来我发现我可以在app.coffee中编写该文件并使用“coffee app.coffee”运行它。

这是更好的方法吗?我可以在生产中使用“咖啡”运行服务器吗?

3 个答案:

答案 0 :(得分:24)

是的,你可以在生产中使用咖啡命令。我用它。

我可以看到为什么要使用app.js包装器的两个原因。

  1. 您想使用CoffeeScript的本地安装。 (应用程序之间的不同版本)
  2. 您希望使用默认的 npm start 来启动服务器:)请参阅 npm help scripts
  3. 哦,你不需要编译它。您可以使用这样的包装器透明地编译咖啡文件:

    server.js:

    require('coffee-script').register();
    require("./yourcoffeeapp.coffee");
    

    如果要在某些不直接支持CoffeeScript命令的托管环境中使用CoffeeScript,此包装器技术尤其有用。比如Cloud 9 IDE。无需编译已编译的js文件。

答案 1 :(得分:7)

我赞成了Epeli的答案,这是明确而优秀的 - 使用.js“包装器”而不是coffee命令可以避免潜在的路径问题 - 但由于这是一个主观问题,让我投入一个相反的意见。

许多CoffeeScripters(包括我自己)建议在部署之前将非平凡的Node应用程序编译到JS。看看Sam Stephenson的node-coffee-project模板并不难看,它包含了一个可以轻松编译和测试的Cakefile。

这样做的一个主要原因是节点堆栈跟踪给出了引用编译的JavaScript的行号,而不是原始的CoffeeScript。因此,当您的服务器日志中记录错误时,能够直接查看服务器上的相应代码是很好的。

编译JS的另一个好处是它可以让你在服务器上使用更多的工具 - 许多Node调试器,测试框架和像cluster这样的好东西喜欢直接在.js文件上运行。

为您的项目获得良好的编译设置需要一些工作,但我认为您会发现它值得。

答案 2 :(得分:0)

我更喜欢像这样创建main.js:

require("coffee-script");
require('./yourcoffeeapp');

和yourcoffeeapp.coffee这样:

http = require 'http'
on_request = (req, res) =>
    res.writeHead 200, {'Content-Type': 'text/plain'}
    res.end "Hello World\n"
server = http.createServer on_request
server.listen 1337, "127.0.0.1"