npm scripts

Тема дорожной карты · Node.js

npm-скрипты — это хуки жизненного цикла и произвольные shell-команды, определённые в поле scripts файла package.json, стандартизирующие процессы сборки, тестирования и деплоя проектов Node.js в разных средах. Типичные npm-скрипты включают "build": "tsc" для компиляции TypeScript, "start": "node dist/index.js" для запуска Node.js в продакшне, "dev": "tsx watch src/index.ts" для локальной разработки с горячей перезагрузкой, а также "test": "vitest" или "test": "jest" для запуска набора тестов. npm-скрипты выполняются в среде оболочки, в которой node_modules/.bin автоматически добавляется в PATH, поэтому локально установленные CLI-инструменты вроде eslint, prettier или tsc можно вызывать напрямую без npx. Префиксы pre и post позволяют определять хуки, автоматически выполняемые до или после любого именованного скрипта, что реализует паттерны вроде линтинга в pretest или копирования ресурсов в postbuild. npm-скрипты — это основной интерфейс между разработчиками и инструментарием проекта Node.js, поэтому их продуманное проектирование важно для согласованности в команде серверной разработки.

Как это работает

npm scripts трекает зависимости через package.json и пинит точную резолюцию в package-lock.json (npm), pnpm-lock.yaml (pnpm) или yarn.lock (yarn). Версии — semver (^1.2.3 пускает minor + patch; ~1.2.3 только patch; 1.2.3 строго). npm install (или pnpm install) читает manifest, резолвит граф, пишет lockfile, складывает пакеты в node_modules. pnpm — content-addressed store + симлинки; npm — копирует; runtime-резолюция одинакова.

Когда применять

pnpm — в monorepo и на dev-машинах с несколькими проектами; экономия диска + скорость реальны. npm — если хотите нулевое трение для новых контрибьюторов (он идёт с Node). Lockfile всегда коммитьте; в CI никогда npm install без него (npm ci / pnpm install --frozen-lockfile). Регулярно npm audit и npm outdated. Закрепляйте major-версии в package.json, когда стабильность важнее свежих фич.

Типичные ошибки

Ловушки npm scripts: удаление package-lock.json "чтобы сбросить" (пересобираете всё дерево deps, можете втянуть breaking patch); npm install в CI вместо npm ci (lockfile тихо меняется); годами игнорируемые npm audit (CVE копятся); глобальные установки (npm i -g) на shared-машинах (path-коллизии). npx или pnpm dlx — для одноразовых бинарей.

Связанные понятия

Полезные ресурсы