NodeJS + CoffeeScript, рендеринг coffeescript скомпилированный js по запросу - PullRequest
20 голосов
/ 04 марта 2011

Что я хотел бы сделать, это добавить следующее ко мне уже работает coffeescript письменный сервер

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

Возможно ли что-то подобное с NodeJS, Express и Coffeescript?

Спасибо!

Jose

Ответы [ 8 ]

30 голосов
/ 04 марта 2011

Хорошие новости: это уже идет с 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 важно настроить после compiler.

Обновление: Начиная с Connect 1.7, промежуточное программное обеспечение compiler удалено,Отчасти из-за этого, а отчасти для обеспечения большего опыта, подобного Rails 3.1, я создал новое промежуточное ПО под названием connect-assets .Установите его с помощью npm, затем настройте его следующим образом:

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

, где directory - папка, в которой находятся файлы CoffeeScript (по умолчанию assets).Просто, правда?Попробуйте и дайте мне знать, что вы думаете.

12 голосов
/ 04 марта 2011
CoffeeScript = require 'coffee-script'

app.get '/test.js', (req, res) ->
  render CoffeeScript.compile coffeeSourceCode
8 голосов
/ 26 августа 2011

По какой-то причине компилятор больше не работает, поэтому я сделал это:

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» не отображается как статический путь.

Примечания:

  1. Это, конечно, приложение CoffeeScript Node.Я предполагаю, что если вы используете CS для клиентских скриптов, вы используете его и для своего сервера!
  2. Строка «static» является необязательной.Я хочу сказать, что вы можете спокойно хранить файлы "js" в статическом каталоге, например, библиотечные файлы, такие как jquery.min.js.
  3. Как и большинство примеров Node / Express, это хорошо для разработки;но для производства вы должны посылать заголовки кэша, сжимать его и, в идеале, использовать некоторую форму обратного прокси, чтобы избежать чтения файла и его компиляции каждый раз.
6 голосов
/ 24 июля 2012

Для тех из нас, кто использует последнюю версию Connect and 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)
2 голосов
/ 19 мая 2014

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

Удачи!

2 голосов
/ 16 апреля 2012

Если вы хотите использовать отличный существующий плагин, я бы порекомендовал Trevor Burnham's Connect-Assets .Это помогает компилировать, минимизировать и объединять .js и .coffee-файлы и оптимизировать, как файлы обслуживаются (в далеком будущем истекает заголовок с аннулированием, используя md5-hash файла).Хорошо написанный плагин.

0 голосов
/ 06 июля 2012

Я думаю, вы должны скомпилировать файлы COFFEE только один раз , особенно в режиме производства

Если вы хотите использовать кофе с Express 3 или с любым веб-фреймворком, посмотрите этот репозиторий ExpressOnSteroids Вы можете использовать это решение или создать свой собственный с Cakefile от этого проекта

0 голосов
/ 20 сентября 2011

Вы можете использовать Coffee4Clients для рендеринга кофейных активов в javascript на лету с вашим экспресс-сервером.

Обновление: Coffee4Clients был убит в пользу DocPad , который предварительно компилирует ваши активы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...