Недавно наш пакет grade9/boot-exec был скачан 1800 раз, как помощник по сборке, мы рады быть частью стольких проектов!
boot-exec
выполняет простую работу по запуску внешних процессов как части конвейера сборки загрузки как блокирующим, так и неблокирующим способом.
Этот пакет используется набором других задач загрузки:
- степень9/загрузка-нпм
- градус 9/сапог
- степень9/загрузка-CSS
- grade9/boot-semgit
- и еще запланировано…..
Основная задача, используемая в этом пакете, — exec
, которая обеспечивает блокировку выполнения внешнего процесса. Чаще всего он используется другой задачей для упрощения запуска определенного инструмента сборки, такого как npm
, или препроцессора, такого как lessc
.
Под капотом мы используем фантастическую библиотеку Apache Commons Exec, которая написана для JVM.
Как минимум задача exec
требует указания process
.
(exec :process "git")
В большинстве случаев мы предполагаем, что вы работаете в операционной системе *nix, однако существуют некоторые механизмы поддержки Windows.
Расположение процесса обычно определяется за вас, однако при необходимости вы можете указать свой собственный локальный или глобальный путь к исполняемому файлу.
(exec :process "bower" :local "./") (exec :process "bower" :global "/usr/local/bin")
Это наиболее полезно при запуске вещей из папки node_modules
.
(exec :process "npm" :local "node_modules/npm/bin")
Почти во всех случаях вы захотите передать дополнительные параметры своим внешним инструментам сборки, это поддерживается путем передачи вектора аргументов в виде строк.
(exec :process "node" :arguments ["app.js"])
По умолчанию задача exec
создает временный каталог для запуска внешнего процесса, это означает, что любые файлы, созданные инструментом сборки, необходимо добавить в набор загрузочных файлов.
(exec :process "npm" :arguments ["install"] :include true)
Рабочий каталог можно отфильтровать для подмножества файлов, используя exclude
.
(exec :process "npm" :arguments ["install"] :include true :exclude #{"node_modules/*.html"})
Поддерживаются пользовательские каталоги, а также кэшированные каталоги, что полезно для инструментов, которые предоставляют функции управления и должны работать с самим проектом; отличным примером этого является git
.
(exec :process "git" :arguments ["status"] :directory ".")
Наконец, есть возможность остановить всю сборку, если внешний процесс возвращает ненулевой код выхода.
(exec :process "exit" :arguments ["1"] :fail true)
Вы можете посмотреть исходный код на GitHub: