簡體   English   中英

pnpm 為相同依賴的完全相同版本提供不同的哈希,打破了nestjs

[英]pnpm provides different hashes for the exact same version of the same dependency, breaking nestjs

我有一個帶有非常基本設置的 monorepo,可用於在此處重現此問題:

它是一個單一的nestjs 應用程序,它有2 個從中讀取的包。

包和主應用程序都需要@nestjs/core以及其他依賴項才能工作,並且不僅在它們自己的本地 package.json 上而且在resolutions {}配置中強制它是完全相同的固定版本主要 package.json。

我可以檢查鎖定文件並發現盡管使用了相同的版本——哈希值不同,導致nestjs出現重大問題,無法可靠地導入可注入依賴項,導致它在引導時中斷。

有沒有辦法防止這種情況? 強制鏈接完全相同的哈希/依賴關系?

當依賴項具有對等依賴項時,如果對等依賴項在依賴關系圖的各個部分中以不同方式解析,它可能會被多次寫入 node_modules。

在您的情況下, @nestjs/core位於graphql-server項目和@myapp/entities項目的依賴項中。 @nestjs/core具有@nestjs/platform-express作為可選的對等依賴項。

@nestjs/platform-express位於graphql-server項目的依賴項中,因此 pnpm 將其鏈接到@nestjs/platform-express 您可以在鎖定文件中看到它:

  /@nestjs/core/8.4.7_fkqgj3xrohk2pflugljc4sz7ea:
    resolution: {integrity: sha512-XB9uexHqzr2xkPo6QSiQWJJttyYYLmvQ5My64cFvWFi7Wk2NIus0/xUNInwX3kmFWB6pF1ab5Y2ZBvWdPwGBhw==}
    requiresBuild: true
    peerDependencies:
      '@nestjs/common': ^8.0.0
      '@nestjs/microservices': ^8.0.0
      '@nestjs/platform-express': ^8.0.0
      '@nestjs/websockets': ^8.0.0
      reflect-metadata: ^0.1.12
      rxjs: ^7.1.0
    peerDependenciesMeta:
      '@nestjs/microservices':
        optional: true
      '@nestjs/platform-express':
        optional: true
      '@nestjs/websockets':
        optional: true
    dependencies:
      '@nestjs/common': 8.4.7_47vcjb2de6lyibr6g4enoa5lyu
      '@nestjs/platform-express': 8.4.7_7tsmhnugyerf5okgqzer2mfqme # <------HERE
      '@nuxtjs/opencollective': 0.3.2
      fast-safe-stringify: 2.1.1
      iterare: 1.2.1
      object-hash: 3.0.0
      path-to-regexp: 3.2.0
      reflect-metadata: 0.1.13
      rxjs: 7.5.5
      tslib: 2.4.0
      uuid: 8.3.2
    transitivePeerDependencies:
      - encoding

在另一個項目( @myapp/entities )中, @nestjs/platform-express不在依賴項中,因此在安裝@nestjs/core時,pnpm 無法解析可選的對等依賴項。 因此,pnpm 需要創建另一個@nestjs/core實例,它沒有鏈接這個可選的對等點。正如您在鎖定文件中看到的那樣,另一個條目沒有@nestjs/platform-express

  /@nestjs/core/8.4.7_g7av3gvncewo44y4rurz3mgav4:
    resolution: {integrity: sha512-XB9uexHqzr2xkPo6QSiQWJJttyYYLmvQ5My64cFvWFi7Wk2NIus0/xUNInwX3kmFWB6pF1ab5Y2ZBvWdPwGBhw==}
    requiresBuild: true
    peerDependencies:
      '@nestjs/common': ^8.0.0
      '@nestjs/microservices': ^8.0.0
      '@nestjs/platform-express': ^8.0.0
      '@nestjs/websockets': ^8.0.0
      reflect-metadata: ^0.1.12
      rxjs: ^7.1.0
    peerDependenciesMeta:
      '@nestjs/microservices':
        optional: true
      '@nestjs/platform-express':
        optional: true
      '@nestjs/websockets':
        optional: true
    dependencies:
      '@nestjs/common': 8.4.7_47vcjb2de6lyibr6g4enoa5lyu
      '@nuxtjs/opencollective': 0.3.2
      fast-safe-stringify: 2.1.1
      iterare: 1.2.1
      object-hash: 3.0.0
      path-to-regexp: 3.2.0
      reflect-metadata: 0.1.13
      rxjs: 7.5.5
      tslib: 2.4.0
      uuid: 8.3.2
    transitivePeerDependencies:
      - encoding

要解決這個問題,您可以將@nestjs/platform-express添加到@myapp/entities項目的依賴項中。 它應該與其他項目中的版本相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM