javascript - lint-staged pokreni različite naredbe za različite mape


Moj projektni folder je postavljen s dvije podmape, frontend i backend, koje služe za pohranu koda.

Stoga u korijenskom direktoriju imam:

- backend
    - package.json
    - other backend codes
- frontend
    - package.json
    - other frontend codes
- package.json

U package.json u korijenu, imam:

  "scripts": {
    "frontend:lint": "cd ./frontend && npm run lint && cd ..",
    "backend:lint": "cd ./backend && npm run lint && cd .."
  },
  "devDependencies": {
    "husky": "4.3.8",
    "lint-staged": "10.5.3"
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "frontend/**/*.{ts, tsx, json, html}": [
      "npm run frontend:lint"
    ],
    "backend/**/*.{ts, json}": [
      "npm run backend:lint"
    ]
  }

Međutim, ako napravim git add i git commit na razini korijena, stalno prikazuje No staged files match any configured task.

Pogledao sam oba pod-package.json i svi su radili. Nisam siguran kako konfigurirati lint-staged da filtrira datoteke.

Odgovor #1

Meni to radi, koristite multi-paketni monorepo

📂root
┣ 📂backend
┃ ┣ .lintstagedrc.json
┗ 📂frontend
┃ ┣ .lintstagedrc.json
┃ 

Prvo instalirajte ovisnosti u root/package.json datoteci i uklonite lint-staged konfiguracijsko polje:

"husky": "8.0.3",
"lint-staged": "13.2.3"

Zatim, u datoteci .husky/pre-commit: (Napomena: Ponovno instalirajte paket kada izmijenite ovu datoteku.)

#!/usr/bin/env sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged

U datoteci backend/.lintstagedrc.json:

{ "src/**/*.{ts,js}": ["eslint --fix", "prettier --write"] }

U datoteci frontend/.lintstagedrc.json:

{
  "src/**/*.{ts,tsx,js,jsx}": [
    "eslint --fix",
    "prettier --write"
  ]
}

Odgovor #2

Neki objašnjenje o tome kako ciljati datoteke dano je ovdje: https://www.npmjs.com/package/lint-staged#user-content-filtering-files

Možda se ne primjenjuje u vašem slučaju jer vaša konfiguracija daje više tipova datoteka, ali samo da to naznačimo kao mogućnost, postoji otvorena ulaznica „Lint-staged zadaci se ne pokreću ako je specificiran samo jedan tip datoteke u vitičastim zagradama, npr. *.{js}“ na lint-staged repozitoriju u kojoj suradnik komentira:

Koristimo micromatch za globove, i ovo zvuči kao problem u biblioteci.

Možda problem ide dalje. Također sam naišao na poruku No staged files match any configured task. i kod mene je dodavanje jsx ekstenzije u konfiguraciju riješilo problem.

Izvorno sam imao:

  "lint-staged": {
    "**/*.{js}": [
      "eslint --fix"
    ]
  }

Nakon izmjene na sljedeće, radilo je u redu:

  "lint-staged": {
    "**/*.{js,jsx}": [
      "eslint --fix"
    ]
  }