20

私がやりたいことは、すでにコーヒースクリプトで書かれたサーバーを実行している私に次を追加することです

app.get '/test.js', (req, res) ->
    render coffee somecoffeefile.coffee

NodeJS、Express、およびCoffeescriptでこのようなことは可能ですか?

ありがとう!

ホセ

4

8 に答える 8

30

朗報: これはプラグインとして Connect (および Connect を拡張する Express) に既に付属しています! 十分に文書化されていません。実際、私は似たようなもの ( 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そのようなファイルが存在しない場合は、自動的にコンパイルされ、結果が提供されます。の後に設定することが重要であることに注意してください。publicfoo.coffeefoo.jsstatic compiler

更新: Connect 1.7 以降、compilerミドルウェアは削除されました。一部はそのためであり、一部は Rails 3.1 に似たエクスペリエンスを提供するために、 connect-assetsという新しいミドルウェアを作成しました。npm でインストールし、次のように設定します。

app.use require('connect-assets')(directory)

directory、CoffeeScript ファイルが入っているフォルダーです (デフォルトは ですassets)。シンプルですね。試してみて、感想を教えてください。

于 2011-03-04T17:30:37.517 に答える
12
CoffeeScript = require 'coffee-script'

app.get '/test.js', (req, res) ->
  render CoffeeScript.compile coffeeSourceCode
于 2011-03-04T17:11:00.097 に答える
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' を実行できます。これにより、実装の詳細が隠されます。「/coffee」ディレクトリが静的パスとして公開されていないため、coffeescript にアクセスできません。

ノート:

  1. もちろん、これは CoffeeScript Node アプリです。クライアント スクリプトに CS を使用している場合は、サーバーにも使用していると思います。
  2. 「静的」行はオプションです。私のポイントは、jquery.min.js のようなライブラリ ファイルなど、「js」ファイルを静的ディレクトリに保持できることです。
  3. ほとんどの Node/Express の例と同様に、これは開発に適しています。ただし、実稼働環境では、キャッシュ ヘッダーを送信して圧縮し、理想的にはなんらかの形式のリバース プロキシを使用して、毎回ファイルを読み取ってコンパイルする必要がないようにする必要があります。
于 2011-08-26T13:03:09.687 に答える
6

Connect と Express の最新バージョンを使用している私たちのために、コーヒー スクリプト ファイルをオンザフライでコンパイルする新しいモジュールnpm install connect-coffee-scriptを公開しました。ドキュメントとサンプル、および紹介記事が提供されています。

readme の例を次に示します。

    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)
于 2012-07-24T12:36:04.423 に答える
2

既存の優れたプラグインを使用したい場合は、Trevor Burnham の Connect-Assetsをお勧めします。これは、.js ファイルと .coffee ファイルのコンパイル、縮小、および連結を支援し、ファイルの提供方法を​​最適化します (ファイルの md5 ハッシュを使用した無効化により、遠い将来の期限切れヘッダー)。よく書かれたプラグイン。

于 2012-04-16T16:04:15.390 に答える
2

coffee-middlewareはまさに私が望んでいたことを行いました - 最小限のセットアップ、生成されたファイルはなく、ずさんではありません。のリクエストを受け取ると、somescript.jsがあるかどうかを確認しsomescript.coffeeます。存在する場合は、それをコンパイルして送信します。

それをインストールします。

npm install coffee-middleware

使用するには、追加するだけです

app.use require('coffee-middleware') src: "#{__dirname}/your/web/root"

静的ファイルを提供するために使用するものの前。

「パブリック」ディレクトリでファイルを提供し、送信する前に 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

幸運を!

于 2014-05-19T05:44:23.697 に答える
0

Coffee4Clientsを使用して、エクスプレス サーバーでその場でコーヒー アセットを JavaScript にレンダリングできます。

更新: アセットをプリコンパイルするDocPadを優先して、Coffee4Clients は削除されました。

于 2011-09-20T10:49:52.507 に答える
0

特に本番モードでは、 COFFEEファイルを一度だけコンパイルする必要があると思います

Express 3 でコーヒーを使用する場合、または任意の Web フレームワークでこのレポExpressOnSteroidsを参照してください。このソリューションを使用するか、このプロジェクトからCakefileを使用して独自のソリューションを作成できます。

于 2012-07-06T12:46:38.193 に答える