Как скомпилировать coffeescript в родительский каталог исходного кода?

Я только что попал в мир кофеина, и у меня возникли небольшие проблемы с Cakefiles.

Насколько я понимаю, Cakefiles использует синтаксис кофейного скрипта; если я хочу найти файл в дочерних каталогах, мне нужно fs модуль и делать все, что мне нужно сделать, как будто я в приложении nodejs не так ли? И мне нужен только один Cakefile для всего проекта, верно? Нужно ли вносить какие-либо изменения в package.json или что-либо еще в проекте, чтобы использовать Cakefile?

При этом, когда я смотрел на некоторые примеры в этом восхитительном уроке по созданию тортов, я наткнулся на следующий фрагмент:

{exec} = require 'child_process'
task 'build', 'Build project from src/*.coffee to lib/*.js', ->
  exec 'coffee --compile --output lib/ src/', (err, stdout, stderr) ->
    throw err if err
    console.log stdout + stderr

Я хотел поставить мои coffescripts под /coffee каталог, и я хотел, чтобы они скомпилированы в / для каждого найденного сценария кофе. Например, если он нашел routes/coffee/index.coffee скомпилированный JS должен быть выведен как routes/index.js, Для этого я попытался запустить $ coffee --output ../ . но так как это не сработало - хотя я думал, что это стоит попробовать - я попытался сделать это с Cakefile.

{exec} = require 'child_process'
task 'build', 'Build project from *.coffee to ../*.js', ->
  exec 'coffee --compile --output ../ .', (err, stdout, stderr) ->
    throw err if err
    console.log stdout + stderr

Который является измененной версией фрагмента выше. Это не сработало. Я пытаюсь узнать больше о файлах тортов, чтобы можно было написать функцию, которая запоминает pwd и переходит в один каталог, устанавливает вывод в качестве этого каталога во время компиляции сценариев кофе.

Если бы вы могли привести меня к решению или источнику, который мог бы помочь мне найти решение, я был бы признателен за это. Однако, пожалуйста, имейте в виду, что я не понимаю продвинутых сценариев кофе-скриптов из документации... Примеры с результатами были бы более полезными для моих навыков в разработке.

1 ответ

Решение

Я думаю, что ключевым отличием здесь является рабочий каталог.

- root
-- lib
--- foo.js <- target
-- src
--- foo.coffee

Когда у вас есть эта настройка, и из root, ты бежишь coffee --compile --output lib/ src/ это работает, потому что root/lib а также root/src оба легко найти из root,

- root
-- foo.js <- target
-- coffee
--- foo.coffee

Теперь из root когда ты бежишь coffee --compile --output ../ ./ Затем вы установите выходной каталог на root/.. и входной каталог root/. (или просто root.)

Что означает, когда вы запускаете эту команду из root Вы хотите просто:

coffee --compile --output ./ coffee/

Или если ты cd coffee/тогда это:

cd coffee
coffee --compile --output ../ ./

Должно работать нормально.

Другие вопросы по тегам