[英]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.