no-unapproved-deps
Begrens produksjonsavhengigheter til en godkjent tillatelsesliste.
Regeldetaljer
Section titled “Regeldetaljer”Store avhengighetstrær øker forsyningskjederisiko og blåser opp pakkestørrelser. Denne regelen leser package.json og rapporterer enhver produksjonsavhengighet som ikke står på en eksplisitt tillatelsesliste. Utviklingsavhengigheter sjekkes ikke.
Eksempler på feil kode
Section titled “Eksempler på feil kode”{ "dependencies": { "zod": "^3.23.0", "chalk": "^5.3.0" } }Hvis bare zod står på den godkjente listen, utløser chalk et brudd.
Eksempler på riktig kode
Section titled “Eksempler på riktig kode”{ "dependencies": { "zod": "^3.23.0" }, "devDependencies": { "chalk": "^5.3.0" }}Alle produksjonsavhengigheter står på den godkjente listen. Biblioteker som bare trengs ved byggetidspunkt ligger i devDependencies.
Regelimplementasjon
Section titled “Regelimplementasjon”/// <reference path="../rules.d.ts" />
const APPROVED_DEPS = [ "@commander-js/extra-typings", "inquirer", "@modelcontextprotocol/sdk", "zod",];
export default { rules: { "no-unapproved-deps": { description: "Production dependencies must be on the approved list", async check(ctx) { let pkg: { dependencies?: Record<string, string> }; try { pkg = (await ctx.readJSON("package.json")) as typeof pkg; } catch { return; // No package.json — nothing to check }
const deps = Object.keys(pkg.dependencies ?? {}); for (const dep of deps) { if (!APPROVED_DEPS.includes(dep)) { ctx.report.violation({ message: `Unapproved production dependency: "${dep}". Approved: ${APPROVED_DEPS.join(", ")}`, file: "package.json", fix: `Either add "${dep}" to the approved list in the ADR or move it to devDependencies`, }); } } }, }, },} satisfies RuleSet;Når du bør bruke den
Section titled “Når du bør bruke den”Når teamet ditt har en eksplisitt policy for avhengighetsstyring og ønsker å forhindre at ikke-godkjente pakker havner i produksjonspakken.
Når du ikke bør bruke den
Section titled “Når du ikke bør bruke den”I prosjekter i tidlig fase der avhengighetslisten fortsatt utvikles raskt, eller når avhengighetsstyring håndteres av et eget verktøy som Socket eller Snyk.