Недавно наш пакет grade9/boot-exec был скачан 1800 раз, как помощник по сборке, мы рады быть частью стольких проектов!

boot-exec выполняет простую работу по запуску внешних процессов как части конвейера сборки загрузки как блокирующим, так и неблокирующим способом.

Этот пакет используется набором других задач загрузки:

Основная задача, используемая в этом пакете, — 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: