Разбор шаблона .gitignore для Node.js
Правило за правилом объясняем, почему Node.gitignore игнорирует node_modules, логи, результаты сборки, .env и кэши инструментов, и что учесть с lockfile и Yarn Berry.
Node.gitignore — шаблон для проектов на JavaScript/TypeScript, где зависимости устанавливаются через npm, Yarn или pnpm. Он рассчитан не на один конкретный фреймворк: в нём собраны кэши и папки сборки, которые создают инструменты экосистемы — Next.js, Nuxt, Gatsby, SvelteKit, VitePress, Docusaurus, Serverless и другие.
Главное здесь — три вещи: зависимости (node_modules/), которые снова появляются после установки, логи и файлы времени выполнения, возникающие при работе, и файлы переменных окружения (.env), которые опасно коммитить. При этом package.json и lockfile шаблон не игнорирует — их нужно коммитить.
Разбор правил
| Шаблон | Что и почему игнорируется |
|---|---|
node_modules/jspm_packages/web_modules/bower_components | Каталоги зависимостейИх всегда можно пересоздать командой npm install, файлов в них десятки тысяч, а нативные бинарники для конкретной ОС в другом окружении скорее сломают сборку. Шаблон без слэша, поэтому под него попадают и node_modules во вложенных пакетах монорепозитория. |
logs*.lognpm-debug.log*yarn-debug.log*yarn-error.log*report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json | Логи и диагностические отчётыОтладочные логи, которые менеджер пакетов оставляет при сбое, и диагностические отчёты Node.js (process.report). В них содержатся окружение и пути того, кто запускал команду, и они создаются каждый раз заново — хранить их в истории незачем. |
pids*.pid*.pid.lockcoverage*.lcov.nyc_outputlib-cov | Файлы времени выполнения и покрытияФайлы с ID процессов и результаты покрытия тестами. Покрытие каждый раз заново вычисляется в CI, поэтому в репозитории оно лишь добавляет конфликтов. |
distout.next.nuxt.output.svelte-kit/build/Release*.tsbuildinfo | Результаты сборкиАртефакты, созданные бандлерами и фреймворками. *.tsbuildinfo — данные инкрементальной сборки TypeScript. Шаблоны без / в конце, такие как dist и out, игнорируют и файлы с тем же именем, поэтому если в исходниках есть такой файл, сузьте правило, например до /dist/. |
.env.env.*!.env.example | Файлы переменных окруженияФайлы с API-ключами и паролями к БД. Варианты вроде .env.local и .env.production блокируются через .env.*, а .env.example со списком ключей без значений возвращается через !, чтобы участники команды знали, какие переменные нужны. |
.npm.eslintcache.stylelintcache.cache.parcel-cache.vite/.pnpm-store | Кэши инструментовКэши, которые линтеры, бандлеры и менеджеры пакетов используют для ускорения. После удаления они создаются автоматически, а их содержимое у всех разное, поэтому при коммите постоянно возникают лишние изменения. |
.pnp.*.yarn/*!.yarn/patches!.yarn/plugins!.yarn/releases!.yarn/sdks!.yarn/versions | Yarn Berry (2+)Исключается только содержимое .yarn/ (.yarn/*), а вложенные папки, которыми нужно делиться, возвращаются через !. Если исключить сам каталог как .yarn/, git не будет заглядывать внутрь и правила ! не сработают. |
На что обратить внимание на практике
package-lock.json,yarn.lockиpnpm-lock.yamlне игнорируйте, а коммитьте. Документация npm тоже настоятельно рекомендует держать lockfile в системе контроля версий.- Если вы используете Zero-Installs в Yarn (когда
.yarn/cacheкоммитится), удалите правило.pnp.*и добавьте!.yarn/cache. - Если
.envуже закоммичен, одно правило игнорирования его не уберёт. Прекратите отслеживание командойgit rm --cached .env, а раскрытые ключи отзовите и выпустите заново. .DS_Storeиз macOS и настроек редактора в этом шаблоне нет, поэтому выберите вместе с ним шаблоны macOS и VisualStudioCode или вынесите это в глобальный gitignore.
Исходный шаблон
# Logslogs*.lognpm-debug.log*yarn-debug.log*yarn-error.log*lerna-debug.log*# Diagnostic reports (https://nodejs.org/api/report.html)report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json# Runtime datapids*.pid*.seed*.pid.lock# Directory for instrumented libs generated by jscoverage/JSCoverlib-cov# Coverage directory used by tools like istanbulcoverage*.lcov# nyc test coverage.nyc_output# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files).grunt# Bower dependency directory (https://bower.io/)bower_components# node-waf configuration.lock-wscript# Compiled binary addons (https://nodejs.org/api/addons.html)build/Release# Dependency directoriesnode_modules/jspm_packages/# Snowpack dependency directory (https://snowpack.dev/)web_modules/# TypeScript cache*.tsbuildinfo# Optional npm cache directory.npm# Optional eslint cache.eslintcache# Optional stylelint cache.stylelintcache# Optional REPL history.node_repl_history# Output of 'npm pack'*.tgz# Yarn Integrity file.yarn-integrity# dotenv environment variable files.env.env.*!.env.example# parcel-bundler cache (https://parceljs.org/).cache.parcel-cache# Next.js build output.nextout# Nuxt.js build / generate output.nuxtdist.output# Gatsby files.cache/# Comment in the public line in if your project uses Gatsby and not Next.js# https://nextjs.org/blog/next-9-1#public-directory-support# public# vuepress build output.vuepress/dist# vuepress v2.x temp directory.temp# Sveltekit cache directory.svelte-kit/# vitepress build output**/.vitepress/dist# vitepress cache directory**/.vitepress/cache# Docusaurus cache and generated files.docusaurus# Serverless directories.serverless/# FuseBox cache.fusebox/# DynamoDB Local files.dynamodb/# Firebase cache directory.firebase/# TernJS port file.tern-port# Stores Visual Studio Code versions used for testing Visual Studio Code extensions.vscode-test# pnpm.pnpm-store# yarn v3.pnp.*.yarn/*!.yarn/patches!.yarn/plugins!.yarn/releases!.yarn/sdks!.yarn/versions# Vite filesvite.config.js.timestamp-*vite.config.ts.timestamp-*.vite/
Источник шаблонов: github/gitignore/Node.gitignore @356fd7b (2026-09-11) · CC0-1.0