Присоединяйтесь к нескольким файлам CoffeeScript в один файл? (Многочисленные подкатарии)
-
14-10-2019 - |
Вопрос
У меня есть куча файлов .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
Есть ли способ сделать это? Есть ли уникальный способ передать список всех файлов в подкаталогах?
Я использую терминал в OSX.
Все они должны быть присоединены в одном файле, потому что в противном случае каждый отдельный файл собирается и завершается этим:
(function() { }).call(this);
Который нарушает объем некоторых функциональных вызовов.
Решение
Вы можете сначала написать сценарий оболочки или грабли, чтобы сначала объединить их вместе, затем компилировать. Что-то типа:
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, касающемся поиска в каталогах:
Другие советы
От Кофейспистская документация:
-j, -Join [file]: перед компиляцией объедините все сценарии вместе в порядке, в котором они были переданы, и запишите их в указанный файл. Полезно для создания крупных проектов.
Итак, вы можете достичь своей цели в командной строке (я использую Bash), как это:
coffee -cj path/to/compiled/file.js file1 file2 file3 file4
где File1 - FILEN - это пути к файлам CoffeeScript, которые вы хотите скомпилировать.
Я только что выпустил альфа -релиз Coffeetoaster, я думаю, это может вам помочь.http://github.com/serpentem/coffee-toaster
Самый простой способ использовать инструмент Coffee Command Line.
Coffee -Output Public -Join -Compile App
Приложение - это мой рабочий каталог, удерживающий несколько подкаталогов, а публика - это место, где будет размещен файл ~ output.js. Легко автоматизировать этот процесс при написании приложения в Nodejs
Это помогло мне (-o
выходной каталог, -j
Присоединяйтесь к Project.js, -cw
Скомпилируйте и смотрите каталог CoffeeScript в полной глубине):
coffee -o web/js -j project.js -cw coffeescript
Использовать кекс Скомпилировать их все в одном (или нескольких), полученном в результате. Cakefile используется в качестве конфигурации, которая управляет, в которой составлены заказы ваших кофейных сценариев - довольно удобно с большими проектами.
Торт довольно прост в установке и настройке, вызывая торт из Vim, когда вы редактируете свой проект.
:!cake build
И вы можете освежить свой браузер и увидеть результаты.
Поскольку я также занят, чтобы узнать лучший способ структурирования файлов и использовать CoffeeScript в сочетании с основой и тортом, я создал Небольшой проект на GitHub Чтобы сохранить это как ссылку для меня, возможно, это также поможет вам вокруг торта и некоторых основных вещей. Все скомпилированные файлы находятся в www папка, чтобы вы могли открыть их в браузере, и все исходные файлы (кроме конфигурации торта) были в SRC папка. В этом примере все файлы .coffee скомпилированы и объединены в один output .js файл, который затем включен в HTML.
В качестве альтернативы вы можете использовать --bare
Флаг, компилируйте JavaScript, а затем, возможно, оберните JS, если это необходимо. Но это, вероятно, создаст проблемы; Например, если у вас есть один файл с кодом
i = 0
foo = -> i++
...
foo()
Тогда есть только один var i
декларация в полученном JavaScript, и i
будет увеличен. Но если вы перенесли foo
Объявление функции в другой файл coffeeScript, затем его i
будет жить в foo
прицел и внешний i
не будет затронут.
Таким образом, объединение коферипта - это разумное решение, но там все еще есть потенциал для путаницы; Порядок, в котором вы объединяете свой код, почти наверняка будет иметь значение. Я настоятельно рекомендую вместо этого модулировать ваш код.