Объединить несколько файлов Coffeescript в один файл? (Несколько подкаталогов) - PullRequest
10 голосов
/ 01 января 2011

У меня есть куча файлов .coffee, которые мне нужно объединить в один файл.

У меня есть папки, настроенные как приложение rails:

/src/controller/log_controller.coffee
/src/model/log.coffee
/src/views/logs/new.coffee

Coffeescript имеетКоманда, которая позволяет объединить несколько сценариев кофе в один файл, но, похоже, работает только с одним каталогом.Например, это прекрасно работает:

coffee --output app/controllers.js --join --compile src/controllers/*.coffee

Но мне нужно иметь возможность включать в себя несколько подкаталогов вроде этой нерабочей команды:

coffee --output app/all.js --join --compile src/*/*.coffee

Есть ли способсделай это?Есть ли UNIXy способ передать список всех файлов в подкаталогах?

Я использую терминал в OSX.

Все они должны быть объединены в один файл, потому что в противном случае каждыйотдельный файл компилируется и упаковывается следующим образом:

(function() { }).call(this);

, который нарушает область действия некоторых вызовов функций.

Ответы [ 7 ]

28 голосов
/ 08 ноября 2011

Из документации CoffeeScript :

-j, --join [FILE]: перед компиляцией объедините все сценарии в порядке их передачи и напишите ихв указанный файл.Полезно для создания больших проектов.

Итак, вы можете достичь своей цели в командной строке (я использую bash) следующим образом:

coffee -cj path/to/compiled/file.js file1 file2 file3 file4

где file1 - fileN - путив файлы coffeescript, которые вы хотите скомпилировать.

7 голосов
/ 02 января 2011

Вы можете написать сценарий оболочки или задачу Rake, чтобы сначала объединить их вместе, а затем скомпилировать.Что-то вроде:

find . -type f -name '*.coffee' -print0 | xargs -0 cat > output.coffee

Затем скомпилируйте output.coffee

Настройте пути в соответствии с вашими потребностями.Также убедитесь, что файл output.coffee не находится на том же пути, что вы ищете с помощью find, иначе вы попадете в бесконечный цикл.

http://man.cx/find |http://www.rubyrake.org/tutorial/index.html

Кроме того, вас могут заинтересовать другие посты в Stackoverflow, касающиеся поиска по каталогам:

3 голосов
/ 12 сентября 2011

Я только что выпустил альфа-релиз CoffeeToaster, думаю, он может вам помочь.http://github.com/serpentem/coffee-toaster

2 голосов
/ 21 мая 2013

Это помогло мне (-o выходной каталог, -j присоединение к project.js, -cw компиляция и просмотр каталога coffeescript на полную глубину):

coffee -o web/js -j project.js -cw coffeescript
2 голосов
/ 09 ноября 2012

Самый простой способ использовать инструмент командной строки для кофе.

кофе - output public --join --компилировать приложение

app - это мой рабочий каталог, содержащий несколько подкаталогов, а public - это файл ~ output.js. Легко автоматизировать этот процесс, если писать приложение в nodejs

1 голос
/ 14 июля 2012

Используйте торт , чтобы скомпилировать их все в один (или несколько) результирующих файлов .js. Cakefile используется в качестве конфигурации, которая контролирует, в каком порядке компилируются ваши кофейные сценарии, что очень удобно для больших проектов.

Cake довольно прост в установке и настройке, вызывая торт из vim, пока вы редактируете свой проект, просто

:!cake build

и вы можете обновить свой браузер и увидеть результаты.

Поскольку я также занят изучением наилучшего способа структурирования файлов и использования coffeescript в сочетании с основой и тортом, я создал небольшой проект на github , чтобы сохранить его в качестве справки для себя, может быть, это поможет вам слишком вокруг торта и некоторые основные вещи. Все скомпилированные файлы находятся в папке www , так что вы можете открыть их в своем браузере, а все исходные файлы (кроме конфигурации тортов) находятся в папке src . В этом примере все файлы .coffee компилируются и объединяются в один выходной файл .js, который затем включается в html.

0 голосов
/ 03 февраля 2011

В качестве альтернативы, вы можете использовать флаг --bare, скомпилировать в JavaScript, а затем, при необходимости, обернуть JS. Но это, вероятно, создаст проблемы; например, если у вас есть один файл с кодом

i = 0
foo = -> i++
...
foo()

, тогда в результирующем JavaScript есть только одно объявление var i, и i будет увеличиваться. Но если вы переместите объявление функции foo в другой файл CoffeeScript, то его i будет находиться в области действия foo, а внешний i не будет затронут.

Таким образом, объединение CoffeeScript является более мудрым решением, но там все еще есть вероятность путаницы; порядок, в котором вы объединяете свой код, почти наверняка будет иметь значение. Я настоятельно рекомендую вместо этого модулировать ваш код.

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