我想要做的是将以下内容添加到已运行coffeescript书面服务器
中app.get '/test.js', (req, res) ->
render coffee somecoffeefile.coffee
NodeJS,Express和Coffeescript可以这样吗?
谢谢!
何
答案 0 :(得分:30)
好消息:这已经附带Connect(因此Express,它扩展了Connect)作为一个插件!它没有详细记录;事实上,在我被告知这样的事情已经存在之前,我自己写了类似的东西(connect-coffee)。
以下是使用Express进行设置的方法:
# Notice the following code is coffescript
# You must add the parens for the app.use method to use in js
coffeeDir = __dirname + '/coffee'
publicDir = __dirname + '/public'
app.use express.compiler(src: coffeeDir, dest: publicDir, enable: ['coffeescript'])
app.use express.static(publicDir)
现在,当http://yourapp/foo.js
被请求时,如果您的public
目录中不存在此类文件,foo.coffee
将自动编译,生成的foo.js
将成为static
提供服务。请注意,在{/ em> compiler
之后设置非常重要。
更新:自Connect 1.7起,compiler
中间件已被删除。部分原因是,为了提供更多类似Rails 3.1的体验,我创建了一个名为connect-assets的新中间件。用npm安装它,然后设置如下:
app.use require('connect-assets')(directory)
其中directory
是您的CoffeeScript文件所在的文件夹(默认为assets
)。简单吧?尝试一下,让我知道你的想法。
答案 1 :(得分:12)
CoffeeScript = require 'coffee-script'
app.get '/test.js', (req, res) ->
render CoffeeScript.compile coffeeSourceCode
答案 2 :(得分:8)
由于某种原因,编译器不再工作了,所以我这样做了:
fs = require 'fs'
coffee = require 'coffee-script'
app.use express.static "#{__dirname}/static"
app.get '/:script.js', (req, res) ->
res.header 'Content-Type', 'application/x-javascript'
cs = fs.readFileSync "#{__dirname}/coffee/#{req.params.script}.coffee", "ascii"
js = coffee.compile cs
res.send js
现在你可以编写coffee / animal.coffee代码并在你的html中编写一个标准脚本src ='/ animal.js'。这隐藏了实现细节。无法访问coffeescript,因为“/ coffee”目录不会作为静态路径暴露。
注意:
答案 3 :(得分:6)
对于我们这些使用最新版Connect和Express的人,我刚刚发布了一个新模块npm install connect-coffee-script,它可以动态编译咖啡脚本文件。提供了文档和示例以及introduction article。
以下是自述文件中的一个例子:
var coffeescript = require('connect-coffee-script');
var connect = require('connect');
var app = connect();
app.use(coffeescript({
src: __dirname,
dest: __dirname + '/public',
bare: true
}));
app.use(connect.static(__dirname + '/public'));
app.listen(3000)
答案 4 :(得分:2)
如果你想使用一个很棒的现有插件,我会推荐Trevor Burnham's Connect-Assets。它有助于编译,缩小和连接.js和.coffee文件,并优化文件的提供方式(使用文件md5-hash进行无效的远期过期标头)。写得好的插件。
答案 5 :(得分:2)
coffee-middleware完全符合我的要求 - 最小的设置,没有生成的文件,而不是马虎。
收到somescript.js
请求后,它会检查是否有somescript.coffee
。如果有,它将编译并发送它。
安装它:
npm install coffee-middleware
要使用,只需添加
app.use require('coffee-middleware') src: "#{__dirname}/your/web/root"
在用于提供静态文件之前。
在" public"中提供文件的简单示例目录,在发送之前遵守coffeescript,并进行彩色记录:
app = require('express')()
app.use require('morgan') 'dev'
app.use require('coffee-middleware') src: "#{__dirname}/views"
app.use require('serve-static') "#{__dirname}/views"
app.listen 80
使用上面的代码:
mkdir coffeeServer
cd coffeeServer
npm install morgan coffee-middleware serve-static
npm install coffee-script -g
echo 'app = require("express")()
app.use require("morgan") "dev"
app.use require("coffee-middleware") src: "#{__dirname}/views"
app.use require("serve-static") "#{__dirname}/views"
app.listen 80' > server.coffee
coffee -c server.coffee
mkdir views
cd views
echo 'console.log "Hello world!"' > script.coffee
cd ..
node server.js
您可以将整个群集复制到终端中,它将设置并运行服务器。
测试:
curl XXX.XXX.XXX.XXX/script.js
最后一点应吐出来
(function() {
console.log("Hello world!");
}).call(this);
//@ sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LmpzIiwic291cmNlcyI6WyJzY3JpcHQuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUEsRUFBQSxPQUFPLENBQUMsR0FBUixDQUFZLGNBQVosQ0FBQSxDQUFBO0FBQUEifQ==NHS0076
祝你好运!
答案 6 :(得分:0)
您可以使用Coffee4Clients通过快速服务器动态地将咖啡资产渲染为javascript。
更新:Coffee4Clients已被杀,有利于DocPad预先编译您的资产。
答案 7 :(得分:0)
我认为你应该只编译COFFEE文件一次,尤其是生产模式
如果您想使用咖啡与Express 3 ,或者使用任何网络框架,请查看此回购ExpressOnSteroids您可以使用此解决方案,或使用Cakefile创建自己的解决方案这个项目