node.js - Mengapa PNPM menandakan pakej saya dengan "version: link:" selepas arahan "pnpm install ..."?
Saya mempunyai sebuah pakej, yang diterbitkan di NPM. Dalam pakej ini, saya menggunakan pakej yang sama sebagai salah satu kebergantungannya, https://github.com/tal-rofe/cz-vinyl
Seperti yang anda boleh lihat, nama pakej ialah cz-vinyl, dengan versi terkini 2.5.0. Paling penting, fail package.json saya termasuk: "cz-vinyl": "2.5.0", jadi saya menggunakan pakej ini sebagai kebergantungan.
Dalam pakej itu, saya mengeksport beberapa jenis TypeScript dalam fail package.jsonnya:
"exports": {
".": {
"types": "./dist/config.d.ts",
"require": "./dist/index.cjs"
}
},
Walau bagaimanapun, apabila saya mempunyai fail TypeScript, https://github.com/tal-rofe/cz-vinyl/blob/main/czvinyl.config.ts, di mana saya melakukan:
import type { CzVinylConfig } from 'cz-vinyl';
Saya mendapat ralat: Cannot find module 'cz-vinyl' atau pengisytiharan jenis yang sepadan.ts(2307). Saya tidak faham mengapa ia berlaku, kerana saya telah mengeksport jenis TypeScript saya dalam pakej tersebut. Kemudian saya menemui bahawa PNPM menggunakan pakej sendiri ini sebagai pautan ke kod sumber.
Daripada fail pnpm-lock.yaml:
cz-vinyl:
specifier: 2.5.0
version: 'link:'
Dan apabila saya melihat pada ./node_modules/cz-vinyl Sebenarnya saya hanya melihat kod sumber saya, bukannya fail yang diedarkan dari NPM. Saya mencubanya di repositori yang sepenuhnya berbeza: saya memasang cz-vinyl dalam projek lain, , dan saya melihat kod NPM yang diedarkan. Dan itulah sebabnya saya mendapat ralat yang saya tampal di sini.
Jadi, kenapa ia boleh berlaku? Dan bagaimana saya boleh membuat PNPM menggunakan kod yang diedarkan oleh NPM dan bukannya pautan terus ke kod sumber?
Selepas penyiasatan lanjut, saya mendapati isu ini berlaku selepas Renovate membuat permintaan tarik pada kod saya untuk mengemas kini beberapa versi pergantungan.
Selepas satu lagi siasatan, saya menjejaki log Renovate, dan mendapati apakah prosesnya:
Renovate mengubah fail
package.jsonsaya dengan perubahan ini:Renovate menjalankan:
pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfileRenovate mengemas kini
pnpm-lock.yamlsaya dengan perubahan baru mengikut langkah 2.
Saya boleh meniru isu ini secara setempat:
- Jalankan
git clone https://github.com/tal-rofe/cz-vinyl.git - Mengubah suai secara manual fail
package.jsonsaya dengan cara yang sama seperti yang dilakukan oleh Renovate - Jalankan secara tempatan
pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile Saya boleh melihat perubahan
pnpm-lock.yamlsaya:

