在生产中使用“咖啡”而不是“节点”命令

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

我想将代码转换为coffeescript,并想创build一个app.coffee,我编译到app.js,所以我可以运行它与“节点app.js”。

但是后来我发现我只能在app.coffee中写下这个文件,并用“coffee app.coffee”运行它。

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

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

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

  1. 你想使用CoffeeScript的本地安装。 (不同版本的应用程序)
  2. 你想使用默认的npm start来启动你的服务器:)参见npm帮助脚本

哦,你不需要编译它。 你可以使用这样的包装,它透明地编译咖啡文件:

server.js:

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

如果您要在某些不直接支持CoffeeScript命令的托pipe环境中使用CoffeeScript,则此包装技术特别有用。 如Cloud 9 IDE。 没有必要摆弄编译的js文件。

我提出了Epeli的答案,这个答案很清楚,非常出色 – 使用一个.js“包装器”而不是coffee命令可以避免潜在的path头痛,但是由于这是一个主观的问题,所以让我提出相反的意见。

包括我自己在内的许多CoffeeScripters,build议在部署之前将不重要的Node应用程序编译为JS。 Sam Stephenson的node-coffee-project模板并不难,它包含了一个Cakefile,使得编译和testing变得轻而易举。

这样做的一个主要原因是节点堆栈跟踪给出的行号是指编译的JavaScript,而不是原始的CoffeeScript。 所以当你的服务器日志中logging错误时,能够在服务器上查看相应的代码是很好的。

编译JS的另一个好处是,它可以让你在服务器上使用更多的工具 – 许多节点debugging器,testing框架,以及像群集这样的好东西,就像直接在.js文件上运行一样。

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

我更喜欢这样创buildmain.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"