簡體   English   中英

覆蓋 npm 包依賴

[英]Override npm package dependency

我讀到: 如何覆蓋嵌套的 NPM 依賴版本?

不幸的是,它不能解決我的問題。

我正在嘗試將包從使用特定依賴項更改為使用該依賴項的另一個版本。

它是否內置在包中,它應該使用哪個版本的依賴項,或者是否可以更改它?

具體來說,我正在嘗試將css-loadercssnano@3.10.0最新)的默認依賴更改為依賴於cssnano@4.0.0-rc.2下一個)。

從上面鏈接的第二個答案中,用戶trickpatty指出:

這將在您運行 npm i 時被刪除,而不是編輯您的 package-lock.json 並將子依賴項添加到那里的“依賴項”,將子依賴項添加到您的 package.json “依賴項”部分

在 package.json 的 devDependencies 中包含cssnano@4.0.0-rc.2css-loader沒有任何作用。 它仍然使用cssnano的其他(默認)版本。

有幾種選擇:

  • 如果您可以使用不同的包管理器,yarn 可以通過添加到package.json來實現它:
"resolutions": {
    "package-a": "2.0.0"
}
  • 如果您可以使用最新的 Node LTS 和 NPM 8: https ://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides

  • 否則,您可以使用在安裝后腳本上運行的諸如https://github.com/mislavlukach/flatten-dependencies之類的工具來解決不同嵌套依賴項版本的問題。 您需要將該版本作為依賴項安裝在您的項目中。

編輯:找到另一種選擇: https ://www.npmjs.com/package/npm-force-resolutions

NPM 8 引入了“覆蓋”,它允許你覆蓋直接依賴的特定傳遞依賴。 對於您的用例,您可以在 package.json 中聲明如下內容。

{
  "overrides": {
    "css-loader": {
      "cssnano": "4.0.0-rc.2"
    }
  }
}

更多細節@ https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides

您的package.json中的以下內容可以在這里為您提供幫助。 它的工作原理是它用您指定的版本覆蓋css-loader請求的所有cssnano版本。

查看文檔

"overrides": {
  "css-loader": {
     "cssnano": "1.2.3"
   }
}

package.json中,您可以添加resolutions並給出使用的依賴路徑。 這是我項目中的示例:

{
  "resolutions": {
    "helmet/helmet-csp": "2.9.1",
    "jest/**/handlebars": "4.5.3"
  }
}

這個線程有點老了,可能已經解決了,但也許有人有同樣的問題。

在我看來,您不應該更改依賴項的依賴版本。 每個項目的開發、測試和發布都考慮了它們聲明的依賴版本。 您可以破壞或更改包的行為,從外部更改其依賴項。

相反,考慮創建項目的分支(css-loader),更改依賴版本,自己測試,並使用你的分支。 您還可以向項目維護者提出拉取請求(如果您認為更改將使社區受益)或發布您的版本(尊重許可政策)。

暫無
暫無

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

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