@nitra/eslint-config
v3.10.6
Published
An ESLint shareable config for projects using Vue and Node
Downloads
2,860
Maintainers
Readme
@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.
