Gå til innholdet

no-banned-imports

Forhindre bruk av forbudte biblioteker og krev anbefalte alternativer.

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.

src/utils/date.ts
import { format } from "moment";
src/api/client.ts
import axios from "axios";
src/utils/date.ts
import { format } from "date-fns";
src/api/client.ts
const response = await fetch("/api/data");
/// <reference path="../rules.d.ts" />
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 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 prosjektet ditt ikke har preferanser mellom biblioteker, eller når det forbudte biblioteket fremdeles er under aktiv migrering og noe bruk forventes midlertidig.