node.js - "pnpm install ..." komutundan sonra PNPM neden paketimi "version: link:" olarak işaretliyor?
Bir paketim var ve bu paket NPM'de yayınlandı. Bu pakette, bağımlılıklarından biri olarak aynı paketi kullandım, https://github.com/tal-rofe/cz-vinyl
Gördüğünüz gibi, paket adı cz-vinyl ve en son sürümü 2.5.0. En önemlisi, benim package.json dosyam şunu içeriyor: "cz-vinyl": "2.5.0", bu yüzden paketi bir bağımlılık olarak kullanıyorum.
Paket içinde, bazı TypeScript türlerini package.json dosyasında dışa aktarıyorum:
"exports": {
".": {
"types": "./dist/config.d.ts",
"require": "./dist/index.cjs"
}
},
Ancak, bir TypeScript dosyam olduğunda, https://github.com/tal-rofe/cz-vinyl/blob/main/czvinyl.config.ts, burada şunu yapıyorum:
import type { CzVinylConfig } from 'cz-vinyl';
Bir hata alıyorum: Cannot find module 'cz-vinyl' or its corresponding type declarations.ts(2307). Bunun neden olduğunu anlamadım, çünkü paketimde TypeScript türlerimi dışa aktardım. Sonra PNPM'nin bu kendi paketini kaynak koda bir bağlantı olarak kullandığını fark ettim.
pnpm-lock.yaml dosyasından:
cz-vinyl:
specifier: 2.5.0
version: 'link:'
Ve ./node_modules/cz-vinyl'e baktığımda Gerçekten sadece kendi kaynak kodumu görüyorum, NPM'den dağıtılan dosyalar yerine. Bunu tamamen farklı bir depoda test ettim: Başka bir projeye cz-vinyl kurdum, PNPM kullanarak, ve dağıtılmış NPM kodumu gördüm. İşte bu yüzden burada paylaştığım hatayı alıyorum.
Peki, bu neden oluyor? Ve PNPM'in doğrudan kaynak koda bağlantı yapmak yerine NPM tarafından dağıtılan kodu kullanmasını nasıl sağlayabilirim?
Daha fazla araştırmadan sonra, sorunun benim kodumda bazı bağımlılıkların sürümlerini güncellemek için Renovate bir pull request oluşturduktan sonra meydana geldiğini öğrendim.
Başka bir incelemeden sonra Renovate günlüklerini izledim ve sürecin ne olduğunu buldum:
Renovate bu değişiklikle
package.jsondosyamı değiştiriyor:Renovate çalıştırır:
pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfileRenovate, adım 2'ye göre yeni değişikliklerle
pnpm-lock.yamldosyamı günceller.
Bu sorunu yerel olarak çoğaltabilirdim:

