@nitra/eslint-config

An ESLint shareable config for projects using Vue and Node
30,246
Install
npm install @nitra/eslint-config
Latest Version:3.10.7
Vue:3
License:AGPL-3.0-or-later
Last Updated:Sep 18, 2026
Links: npm
Maintainer: vitaliytv

@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. hk hook запускає 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

@lehoczky/eslint-config-vue

ESLint Config for Vue3 with TypeScript

2,595 0
@anoesj/eslint-config-vue-ts

Anoesj's ESLint config for Vue and Nuxt projects with TypeScript

1,603 0
@deviltea/eslint-config

DevilTea's opinionated ESLint flat config for JavaScript, TypeScript, and Vue.

21,263 0
@tada5hi/eslint-config-vue

Shared ESLint flat config for Vue.js projects (deprecated — use @tada5hi/eslint-...

10,599 1
@nexso/eslint-config-typescript

Nexso Flat Config for TypeScript projects using ESLint 10

1,232 0

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