Присоединить несколько файлов Coffeescript в один файл? (Несколько подкаталогов)

У меня есть куча файлов. 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);

Что нарушает объем некоторых вызовов функций.

Ответ 1

Вы можете написать команду оболочки script или 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 относительно поиска по каталогам:

Ответ 2

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

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

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

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

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

Ответ 4

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

coffee --output public --join --compile app

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

Ответ 5

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

coffee -o web/js -j project.js -cw coffeescript

Ответ 6

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

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

:!cake build

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

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

Ответ 7

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

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

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

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