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:

  1. Renovate mengubah fail package.json saya dengan perubahan ini:

  2. Renovate menjalankan: pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile

  3. Renovate mengemas kini pnpm-lock.yaml saya dengan perubahan baru mengikut langkah 2.

Saya boleh meniru isu ini secara setempat:

  1. Jalankan git clone https://github.com/tal-rofe/cz-vinyl.git
  2. Mengubah suai secara manual fail package.json saya dengan cara yang sama seperti yang dilakukan oleh Renovate
  3. Jalankan secara tempatan pnpm install --recursive --lockfile-only --ignore-scripts --ignore-pnpmfile
  4. Saya boleh melihat perubahan pnpm-lock.yaml saya: