Присоединить несколько файлов 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, которые вы хотите скомпилировать.
Ответ 3
Я только что выпустил альфа-выпуск CoffeeToaster, я думаю, это может вам помочь.
http://github.com/serpentem/coffee-toaster
Ответ 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 - более разумное решение, но там все еще существует путаница; порядок, в котором вы конкатенируете свой код, почти наверняка будет иметь значение. Я настоятельно рекомендую вместо этого заменить код.