Последовательное выполнение NPM-скриптов: гарантированный запуск

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для последовательного запуска npm-скриптов в package.json используйте оператор &&.

json
Скопировать код
"scripts": {
  "start": "npm run script1 && npm run script2 // script2 начнёт выполнение после завершения script1, соблюдая последовательность выполнения 👍"
}

Вы можете их запустить, выполнив npm run start; script1 сработает сначала, и только в случае его успешного выполнения, запустится script2.

Такой подход необходим для задач, таких как setup, build, test, когда каждому шагу требуется строгое последовательное выполнение.

Кинга Идем в IT: пошаговый план для смены профессии

Визуализация

Представьте npm-скрипты в виде домино: каждое домино запускает следующий элемент:

Markdown
Скопировать код
Челнок домино: 🚄 1️⃣ -> 2️⃣ -> 3️⃣ -> 🏁
NPM-скрипт 1 (setup): 🚄 Устанавливает первую плитку 1️⃣
NPM-скрипт 2 (build): 🚄 Устанавливает следующую 2️⃣
NPM-скрипт 3 (test): 🚄 Заканчивает откат на плитке 3️⃣ и достигает финиша 🏁

Последовательность подразумевает, что каждая плитка упадёт после предыдущей.

Markdown
Скопировать код
"scripts": {
  "start": "npm run setup && npm run build && npm run test 
  // Домино *_**любит**_* падать поочерёдно, так же как и наши скрипты 🚱"
}

Каждый оператор && – это согласие для следующей плитки продолжить движение. 🚦🟢

Оптимизация с помощью npm-run-all

Вместо многочисленных && пакет npm-run-all сделает код более компактным и чистым:

json
Скопировать код
"scripts": {
  "start": "run-s script1 script2 // Код выглядит лаконичнее, а выполнение становится эффективнее 🧹"
}

Неявное цепное соединение с помощью пре/пост-хуков

NPM позволяет автоматически связать задачи с помощью пре/пост-хуков. Скрипты с префиксами pre и post выполняются до и после основного скрипта автоматически, что делает package.json более структурированным:

json
Скопировать код
"scripts": {
  "prebuild": "npm run clean",
  "build": "npm run compile",
  "postbuild": "npm run test"
}

При выполнении npm run build последовательно активируются clean, compile и test.

Обработка кодов выхода скриптов

Важно правильно обрабатывать коды выхода скриптов. Если код выхода отличается от нуля, это прервёт цепочку, что может быть полезно для остановки процессов при возникновении ошибок.

Расширенное создание последовательностей задач

Для более сложных сценариев можно использовать дочерние процессы Node.js или инструменты управления задачами типа Gulp:

  • Node.js предоставляет child_process.spawn() и child_process.exec() для детализированного управления процессами.
  • Gulp и подобные инструменты предлагают дополнительные способы управления порядком и зависимостями задач.

Обеспечение кроссплатформенной совместимости

Чтобы избежать потенциальных проблем совместимости на различных операционных системах, используйте инструменты, такие как cross-env, особенно при управлении переменными окружения в npm-скриптах.

Ситуационное применение последовательного выполнения

  • Непрерывная интеграция: гарантирует запуск тестов после полной сборки проекта.
  • Деплоймент: выполняет миграции базы данных после запуска сервера, но до старта приложения.
  • Настройка среды разработки: убеждается в установке всех зависимостей перед запуском локальных серверов разработки.

Полезные материалы

  1. Скрипты | Документация npm — руководство по npm-скриптам.
  2. npm-run-all – npm — пакет для упрощения последовательного или параллельного запуска npm-скриптов.
  3. node.js – Лучший способ выполнить npm install для подкаталогов? – Stack Overflow — советы сообщества Stack Overflow по последовательному запуску npm-скриптов.
  4. Medium — статья об особенностях выполнения npm-скриптов и жизненных циклов.
  5. Дочерние процессы | Документация Node.js v21.6.1 — официальная документация Node.js по работе с дочерними процессами для сложных задач.
  6. Medium — анализ пре- и пост-хуков в npm-скриптах.
  7. cross-env – npm — инструмент для обеспечения совместимости скриптов в различных операционных системах, включая управление переменными окружения.