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
micromatchza 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"
]
}
