Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Monorepo: nested package's lint rules/jsPlugins silently dropped when workspace root has a lint block

Chiusa
#2,628 1 commento 1 reazione 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
74/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
tooling

Direzione di ricerca

Inizia con la riproduzione composta da sei file, esegui pnpm install, quindi esegui cd apps/child 6�26 vp lint e vp lint --print-config con il blocco lint della root presente. Confronta la configurazione stampata con i file vite.config.ts della root e del child; il lavoro è completato quando la regola no-throw-literal del child e jsPlugins vengono inoltrati o segnalati, invece di essere eliminati silenziosamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

In a pnpm workspace/monorepo, when the root vite.config.ts has its own lint block, a nested package's lint.rules and lint.jsPlugins are silently ignored by vp lint. Remove the root's lint block and the nested config is forwarded correctly, so the nested config itself is valid.

Tested on vite-plus 0.3.0 (oxlint 1.79).

Minimal reproduction

Self-contained, 6 files, no custom plugin needed. Run with pnpm install then cd apps/child && vp lint.

repro/
├── package.json          # devDeps: vite-plus 0.3.0
├── pnpm-workspace.yaml   # packages: ["apps/*"]
├── vite.config.ts        # ROOT: has a lint block
└── apps/
    └── child/
        ├── package.json  # devDeps: vite-plus 0.3.0
        ├── vite.config.ts # CHILD: lint.rules + lint.jsPlugins
        └── src/bad.ts     # throws a string literal

Root vite.config.ts:

import { defineConfig } from 'vite-plus';

export default defineConfig({
  lint: {
    jsPlugins: [{ name: 'vite-plus', specifier: 'vite-plus/oxlint-plugin' }],
    rules: { 'vite-plus/prefer-vite-plus-imports': 'error' },
    options: { typeAware: true, typeCheck: true },
  },
});

Child apps/child/vite.config.ts:

import { defineConfig } from 'vite-plus';

export default defineConfig({
  lint: {
    rules: { 'no-throw-literal': 'error' },
    jsPlugins: [
      { name: 'ghost', specifier: 'this-plugin-is-definitely-not-installed' },
    ],
  },
});

Child apps/child/src/bad.ts:

export function ping(): string {
  throw 'a string literal'; // violates no-throw-literal ('ghost' jsPlugin would crash oxlint if loaded)
}

Actual

$ cd apps/child && vp lint
# (no output — neither the rule nor the plugin is applied, and loading the
#  nonexistent "ghost" plugin does not even get attempted)

Expected

throw 'a string literal' should be reported by no-throw-literal, and the ghost jsPlugin load should be attempted (would expect a loud error for a nonexistent plugin).

Proof the nested config is fine (and the bug is the root's lint block)

Root lint block present:

$ cd apps/child && vp lint
( no output )

Root lint block removed (only the lint block lines deleted):

$ cd apps/child && vp lint
src/bad.ts:2:9: error eslint(no-throw-literal): Expected an error object to be thrown
...  [if child also has the ghost jsPlugins entry, it fails loudly instead:]
Failed to parse oxlint configuration file.
  x Failed to load JS plugin: this-plugin-is-definitely-not-installed

Same behavior in vp lint --print-config: nested/root custom rules and jsPlugins never appear in the printed oxlint config when the root has a lint block.

Also worth noting: the same config in a single-package (non-monorepo) project forwards lint.jsPlugins correctly, so forwarding works in the simple case and breaks specifically with a root lint block present.

Related

  • #997 — nested package ignorePatterns dropped during config merging (closed; this may share the config-merge code path).
Lingua principale
Rust
Stelle
6k
Fork
274
Merge medio
1g 13h
PR unite (30g)
195

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di voidzero-dev/vite-plus

Tutte le issue di voidzero-dev/vite-plus

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.