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:
Renovate ändrar min
package.json-fil med denna ändring:Renovate kör:
pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfileRenovate uppdaterar min
pnpm-lock.yamlmed de nya ändringarna enligt steg 2.
Jag kunde återskapa detta problem lokalt:

