---
title: no-unapproved-deps
description: Begrens produksjonsavhengigheter til en godkjent tillatelsesliste for å kontrollere forsyningskjederisiko og avhengighetsoppblåsing.
---

Begrens produksjonsavhengigheter til en godkjent tillatelsesliste.

## 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

```json title="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.

## Eksempler på **riktig** kode

```json title="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`.

## Regelimplementasjon

```typescript
/// <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

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

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.
