Присоединяйтесь к нескольким файлам CoffeeScript в один файл? (Многочисленные подкатарии)

StackOverflow https://stackoverflow.com/questions/4575260

  •  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 не будет затронут.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top