node.js - Hvorfor markerer PNPM pakken min med "version: link:" etter kommandoen "pnpm install ..."?


Jeg har en pakke som er publisert på NPM. I denne pakken brukte jeg den samme pakken som en av dens avhengigheter, https://github.com/tal-rofe/cz-vinyl

Så som du kan se, er pakkenavnet cz-vinyl, med siste versjon 2.5.0. Viktigst, min package.json-fil inkluderer: "cz-vinyl": "2.5.0", så jeg bruker pakken som en avhengighet.

I pakken eksporterer jeg noen TypeScript-typer i dens package.json-fil:

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

Men når jeg har en TypeScript-fil, https://github.com/tal-rofe/cz-vinyl/blob/main/czvinyl.config.ts, hvor jeg gjør:

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

Jeg får en feil: Cannot find module 'cz-vinyl' or its corresponding type declarations.ts(2307). Jeg forsto ikke hvorfor det var slik, fordi jeg eksporterte mine TypeScript-typer i pakken. Så fant jeg ut at PNPM bruker denne egenpakken som en lenke til kildekoden.

Fra pnpm-lock.yaml-filen:

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

Og når jeg ser på ./node_modules/cz-vinyl Ser jeg faktisk bare min egen kildekode, i stedet for de distribuerte filene fra NPM. Jeg testet det i et helt annet repository: Jeg installerte cz-vinyl i et annet prosjekt, ved å bruke PNPM, og jeg så min distribuerte NPM-kode. Og det er derfor jeg får feilen jeg limte inn her.

Så, hvorfor skjer det egentlig? Og hvordan kan jeg få PNPM til å bruke NPM-distribuert kode i stedet for å lenke direkte til kildekoden?


Etter mer undersøkelse fant jeg ut at problemet oppstår etter at Renovate lager en pull-forespørsel på koden min for å oppdatere noen av avhengighetenes versjoner.

Etter en ny undersøkelse sporet jeg Renovate-loggene og fant ut hva prosessen er:

  1. Renovate endrer min package.json-fil med denne endringen:

  2. Renovate kjører: pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile

  3. Renovate oppdaterer min pnpm-lock.yaml med de nye endringene i henhold til trinn 2.

Jeg kunne reprodusere dette problemet lokalt:

  1. Kjør git clone https://github.com/tal-rofe/cz-vinyl.git
  2. Endret manuelt min package.json-fil på samme måte som Renovate gjorde
  3. Kjør lokalt pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile
  4. Jeg kan se mine pnpm-lock.yaml-endringer:

Relaterte artikler