Node.jsМодуль 2: Экосистема npm
npm scripts
Автоматизация задач с npm
Цель урока
В этом уроке ты научишься:
- Создавать npm scripts
- Использовать pre/post хуки
- Работать с переменными окружения
Базовые скрипты
{
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest",
"build": "tsc"
}
}Запуск
# Стандартные скрипты
npm start
npm test
# Пользовательские скрипты
npm run dev
npm run buildПримечание
start и test можно запускать без run: npm start, npm test.
Pre и Post хуки
{
"scripts": {
"prebuild": "rm -rf dist",
"build": "tsc",
"postbuild": "cp package.json dist/",
"pretest": "npm run lint",
"test": "jest",
"posttest": "echo 'Тесты завершены'"
}
}Порядок выполнения npm run build:
prebuildbuildpostbuild
Передача аргументов
{
"scripts": {
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage"
}
}# Передача аргументов через --
npm test -- --verbose
npm run test -- --watchПеременные окружения
В скриптах
{
"scripts": {
"start": "NODE_ENV=production node index.js",
"dev": "NODE_ENV=development nodemon index.js"
}
}cross-env (кроссплатформенность)
npm install cross-env --save-dev{
"scripts": {
"start": "cross-env NODE_ENV=production node index.js",
"dev": "cross-env NODE_ENV=development nodemon index.js"
}
}dotenv
npm install dotenv// index.js
require('dotenv').config();
console.log(process.env.DATABASE_URL);# .env
DATABASE_URL=mongodb://localhost:27017/mydb
API_KEY=secret123Параллельное выполнение
npm-run-all
npm install npm-run-all --save-dev{
"scripts": {
"lint": "eslint .",
"test": "jest",
"build": "tsc",
"check": "npm-run-all lint test",
"check:parallel": "npm-run-all --parallel lint test",
"dev": "npm-run-all --parallel dev:*",
"dev:server": "nodemon server.js",
"dev:client": "webpack serve"
}
}concurrently
npm install concurrently --save-dev{
"scripts": {
"dev": "concurrently \"npm run server\" \"npm run client\"",
"server": "nodemon server.js",
"client": "webpack serve"
}
}Полезные скрипты
{
"scripts": {
"start": "node dist/index.js",
"dev": "nodemon src/index.ts",
"build": "tsc",
"build:watch": "tsc --watch",
"lint": "eslint src/",
"lint:fix": "eslint src/ --fix",
"format": "prettier --write src/",
"format:check": "prettier --check src/",
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"clean": "rm -rf dist node_modules",
"reinstall": "npm run clean && npm install",
"prepare": "husky install",
"prepublishOnly": "npm run build && npm test"
}
}Практика
Задание 1: Базовые скрипты
Задача: Создай скрипты для запуска, разработки и тестирования.
Решение:
{
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest"
}
}Задание 2: Pre/Post хуки
Задача: Добавь очистку перед сборкой.
Решение:
{
"scripts": {
"prebuild": "rm -rf dist",
"build": "tsc"
}
}Проверь себя
- Как запустить пользовательский скрипт?
- Что такое pre/post хуки?
- Как передать аргументы в скрипт?