Gå til innholdet

no-unapproved-deps

Begrens produksjonsavhengigheter til en godkjent tillatelsesliste.

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.

package.json
{ "dependencies": { "zod": "^3.23.0", "chalk": "^5.3.0" } }

Hvis bare zod står på den godkjente listen, utløser chalk et brudd.

package.json
{
"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.

/// <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 teamet ditt har en eksplisitt policy for avhengighetsstyring og ønsker å forhindre at ikke-godkjente pakker havner i produksjonspakken.

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.