node.js - Varför markerar PNPM mitt paket med "version: link:" efter kommandot "pnpm install ..."?


Jag har ett paket som är publicerat på NPM. I detta paket använde jag samma paket som en av dess beroenden, https://github.com/tal-rofe/cz-vinyl

Så som du kan se, är paketnamnet cz-vinyl, med senaste versionen 2.5.0. Viktigast, min package.json-fil inkluderar: "cz-vinyl": "2.5.0", så jag använder paketet som ett beroende.

I paketet exporterar jag några TypeScript-typer i dess package.json-fil:

    "exports": {
        ".": {
            "types": "./dist/config.d.ts",
            "require": "./dist/index.cjs"
        }
    },

Men när jag har en TypeScript-fil, https://github.com/tal-rofe/cz-vinyl/blob/main/czvinyl.config.ts, där jag gör:

import type { CzVinylConfig } from 'cz-vinyl';

Jag får ett fel: Cannot find module 'cz-vinyl' or its corresponding type declarations.ts(2307). Jag förstod inte varför det var så, eftersom jag faktiskt exporterade mina TypeScript-typer i paketet. Sedan upptäckte jag att PNPM använder detta egna paket som en länk till källkoden.

Från pnpm-lock.yaml-filen:

  cz-vinyl:
    specifier: 2.5.0
    version: 'link:'

Och när jag tittar på ./node_modules/cz-vinyl Ser jag verkligen bara min källkod, istället för de distribuerade filerna från NPM. Jag testade det i ett helt annat repository: jag installerade cz-vinyl i ett annat projekt, med PNPM, och jag såg min distribuerade NPM-kod. Och det är därför jag får det felmeddelande jag klistrade in här.

Så, varför händer det ens? Och hur kan jag få PNPM att använda den NPM-distribuerade koden istället för att länka direkt till källkoden?


Efter mer undersökning upptäckte jag att problemet uppstår efter att Renovate gör en pull-begäran på min kod för att uppdatera vissa beroendes versioner.

Efter ytterligare en undersökning spårade jag Renovate-loggarna och tog reda på vad processen är:

  1. Renovate ändrar min package.json-fil med denna ändring:

  2. Renovate kör: pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile

  3. Renovate uppdaterar min pnpm-lock.yaml med de nya ändringarna enligt steg 2.

Jag kunde återskapa detta problem lokalt:

  1. Kör git clone https://github.com/tal-rofe/cz-vinyl.git
  2. Modifierade manuellt min package.json-fil på samma sätt som Renovate gjorde
  3. Kör lokalt pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile
  4. Jag kan se mina pnpm-lock.yaml-ändringar:

Relaterade artiklar