@nitra/eslint-config
@nitra/eslint-config
Спільна конфігурація ESLint 10 (flat config) для проєктів на Vue та Node.js.
Вимоги
- ESLint 10+ (тільки flat config, eslintrc більше не підтримується)
- Node.js 20.19.0+
Встановлення
bun add @nitra/eslint-config -D
Це лише спільна конфігурація. ESLint та плагіни потрібно встановлювати окремо або вони підтягнуться як залежності (форматування коду — окремо, наприклад oxfmt).
Використання
У корені проєкту створіть eslint.config.js (або eslint.config.mjs):
import { getConfig } from '@nitra/eslint-config'
export default getConfig({
node: ['src/server', 'scripts'], // шляхи до Node.js коду
vue: ['src/frontend'], // шляхи до Vue 3
vue2: [] // шляхи до Vue 2 (якщо є)
})
-
Тільки Node.js — передайте лише
node:import { getConfig } from '@nitra/eslint-config' export default getConfig({ node: ['.'] }) -
Тільки Vue — передайте лише
vueабоvue2:import { getConfig } from '@nitra/eslint-config' export default getConfig({ vue: ['src'] }) -
Monorepo — укажіть відповідні директорії:
import { getConfig } from '@nitra/eslint-config' export default getConfig({ node: ['apps/api', 'packages/cli'], vue: ['apps/web'], vue2: ['apps/legacy'] })
Додаткові глобали (опційно)
Якщо потрібні додаткові глобальні змінні (наприклад, для Vue), їх можна додати окремим блоком у вашому eslint.config.js після виклику getConfig():
import { getConfig } from '@nitra/eslint-config'
export default [
...getConfig({ vue: ['src'] }),
{
files: ['src/**/*.{js,vue}'],
languageOptions: {
globals: {
localStorage: 'readonly'
}
}
}
]
Що входить у конфіг
- Базові правила JS (recommended), JSDoc, eslint-plugin-import-x (префікс
import-x/), Unicorn - YAML і Markdown
- Для Node: eslint-plugin-n
- Для Vue: eslint-plugin-vue з правилами атрибутів та порядку
- Oxlint (recommended)
Inventory та rollout policy
- Повний inventory активних ESLint і Oxlint rules генерується з effective config, містить severity, options і посилання на upstream documentation. Оновити його можна командою
bun run generate:rule-inventory. - Для automatic pre-commit gate один раз виконайте
hk install --global.hkhook запускає generator і блокує commit, якщо inventory змінився. Hook не stage-ить generated файли: перегляньте diff і додайтеnpm/docs/rule-inventory.mdтаnpm/tests/fixtures/rule-inventory/inventory.jsonдо commit явно. - SemVer policy для lint-правил визначає, у якій версії правило може почати блокувати downstream CI, і як це фіксується в changelog.
- Усі release notes ведуться в CHANGELOG.md за Keep a Changelog: кожна версія описує різницю з попередньою та посилається на relevant rules або inventory.
- Кожен фактичний npm version bump у CI створює git tag і GitHub Release з верхньою секцією цього changelog; push без version bump не створює duplicate release.
Стиль коду
for...in заборонено — рефакторити на for...of
no-restricted-syntax із селектором ForInStatement забороняє for...in у всіх JS-подібних файлах (.js, .mjs, .cjs, .vue). Разом із цим зникає потреба в Object.hasOwn-guard — він має зникнути з кодом одночасно з for...in.
// ❌ погано
for (const k in obj) {
if (!Object.hasOwn(obj, k)) continue
use(k, obj[k])
}
for (const i in arr) {
use(arr[i])
}
// ✅ добре
for (const [k, v] of Object.entries(obj)) {
use(k, v)
}
for (const item of arr) {
use(item)
}
Альтернативи залежно від потреби: Object.keys(obj), Object.values(obj), Object.entries(obj) — або пряма ітерація масиву через for...of.
Related Packages
Anoesj's ESLint config for Vue and Nuxt projects with TypeScript
DevilTea's opinionated ESLint flat config for JavaScript, TypeScript, and Vue.
Shared ESLint flat config for Vue.js projects (deprecated — use @tada5hi/eslint-...
Version History
| Version | Released | License |
|---|---|---|
| 3.10.7 | AGPL-3.0-or-later | |
| 3.10.6 | AGPL-3.0-or-later | |
| 3.10.5 | AGPL-3.0-or-later | |
| 3.10.4 | AGPL-3.0-or-later | |
| 3.10.3 | AGPL-3.0-or-later | |
| 3.10.2 | AGPL-3.0-or-later | |
| 3.10.1 | AGPL-3.0-or-later | |
| 3.10.0 | AGPL-3.0-or-later | |
| 3.9.5 | AGPL-3.0-or-later | |
| 3.9.4 | AGPL-3.0-or-later | |
| 3.9.3 | AGPL-3.0-or-later | |
| 3.9.2 | AGPL-3.0-or-later | |
| 3.9.1 | AGPL-3.0-or-later | |
| 3.9.0 | AGPL-3.0-or-later | |
| 3.8.1 | AGPL-3.0-or-later | |
| 3.8.0 | AGPL-3.0-or-later | |
| 3.7.0 | AGPL-3.0-or-later | |
| 3.6.14 | AGPL-3.0-or-later | |
| 3.6.13 | AGPL-3.0-or-later | |
| 3.6.12 | AGPL-3.0-or-later | |
| 3.6.11 | AGPL-3.0-or-later | |
| 3.6.10 | AGPL-3.0-or-later | |
| 3.6.9 | AGPL-3.0-or-later | |
| 3.6.8 | AGPL-3.0-or-later | |
| 3.6.7 | AGPL-3.0-or-later | |
| 3.6.6 | AGPL-3.0-or-later | |
| 3.6.4 | AGPL-3.0-or-later | |
| 3.6.3 | AGPL-3.0-or-later | |
| 3.6.2 | AGPL-3.0-or-later | |
| 3.6.1 | AGPL-3.0-or-later |
Showing the latest 30 of 139. See every release on npm