--- title: no-banned-imports description: Forhindre bruk av forbudte biblioteker og krev anbefalte alternativer ved hjelp av en datadrevet mønsterliste. --- Forhindre bruk av forbudte biblioteker og krev anbefalte alternativer. ## Regeldetaljer Team forbyr ofte tunge eller utdaterte biblioteker til fordel for lettere eller native alternativer. Denne regelen bruker en datadrevet konfigurasjon -- en array med objekter som spesifiserer regex-mønsteret, biblioteknavnet og det anbefalte alternativet. Å legge til et nytt forbud er en endring på en linje. ## Eksempler på **feil** kode ```typescript title="src/utils/date.ts" import { format } from "moment"; ``` ```typescript title="src/api/client.ts" import axios from "axios"; ``` ## Eksempler på **riktig** kode ```typescript title="src/utils/date.ts" import { format } from "date-fns"; ``` ```typescript title="src/api/client.ts" const response = await fetch("/api/data"); ``` ## Regelimplementasjon ```typescript /// const BANNED_IMPORTS = [ { pattern: /from\s+['"]lodash['"]/, name: "lodash", alternative: "native array methods", }, { pattern: /from\s+['"]moment['"]/, name: "moment", alternative: "Temporal API or date-fns", }, { pattern: /from\s+['"]axios['"]/, name: "axios", alternative: "native fetch()", }, ]; export default { rules: { "no-banned-imports": { description: "Prevent usage of banned libraries", async check(ctx) { for (const banned of BANNED_IMPORTS) { const matches = await ctx.grepFiles(banned.pattern, "src/**/*.ts"); for (const match of matches) { ctx.report.violation({ message: `Banned import: "${banned.name}" is not allowed. Use ${banned.alternative} instead.`, file: match.file, line: match.line, fix: `Replace ${banned.name} with ${banned.alternative}`, }); } } }, }, }, } satisfies RuleSet; ``` ## Når bør du bruke den Når teamet ditt har standardisert på bestemte biblioteker og vil forhindre avvik mot alternativer. Vanlige forbud inkluderer lodash (native metoder), moment (date-fns eller Temporal) og axios (native fetch). ## Når bør du ikke bruke den Når prosjektet ditt ikke har preferanser mellom biblioteker, eller når det forbudte biblioteket fremdeles er under aktiv migrering og noe bruk forventes midlertidig.