簡體   English   中英

如何確定哪些 npm 包只是對等依賴項?

[英]How do I identify which npm packages are just peer dependencies?

我正在嘗試從 package.json 文件中刪除一些項目的未使用包,但我遇到了對等依賴項的問題。 有一些工具,例如depcheck ,會嘗試列出所有“未使用”的包,但它不會區分實際未使用的包和未使用的包,因為它們是對等依賴項。

是否有 package 或一些我不熟悉的npm命令,這將允許我列出我的項目中的所有對等依賴項,或者至少允許我輸入 ZEFE90A8E604A7C840D788D安裝 package 是因為它是另一個 package 的對等依賴項?

對於后代,這是我的一個項目的依賴項的示例。 在這個項目中,我知道例如reflect-metadata@nestjs/common的對等依賴項,但我只是在卸載它之后才發現。

"dependencies": {
    "@google-cloud/storage": "^3.2.1",
    "@google-cloud/vision": "^1.3.0",
    "@google/maps": "^0.5.5",
    "@nestjs/common": "^6.6.7",
    "@nestjs/core": "^6.6.7",
    "@nestjs/platform-express": "^6.6.7",
    "@slack/webhook": "^5.0.1",
    "@typeform/api-client": "^1.5.1",
    "algoliasearch": "^3.34.0",
    "array-uniq": "^2.1.0",
    "basic-auth": "^2.0.1",
    "child-process-promise": "^2.2.1",
    "class-transformer": "^0.2.3",
    "class-validator": "^0.10.0",
    "express": "^4.17.1",
    "firebase-admin": "^8.5.0",
    "firebase-functions": "^3.2.0",
    "geoip-lite": "^1.3.8",
    "geolib": "^3.0.4",
    "glob": "^7.1.4",
    "hbs": "^4.0.4",
    "hubspot-api": "^2.2.10",
    "json2csv": "^4.5.3",
    "lodash": "^4.17.15",
    "luxon": "^1.17.2",
    "node-fetch": "^2.6.0",
    "postmark": "^2.2.9",
    "promise-settle": "^0.3.0",
    "qrcode": "^1.4.1",
    "redux": "^4.0.4",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^6.5.3",
    "sales-tax": "^2.0.10",
    "sanitize-filename": "^1.6.3",
    "sharp": "^0.23.0",
    "stripe": "^7.9.0"
  },

這是一個很好的問題,不知道為什么它被否決了。 不幸的是,我不知道有一種現有的、自動化程度很高的方法來做到這一點。

您可以像這樣測試單個 package:

npm uninstall some-package && npm ls

如果有任何對等依賴違規,它們將被打印出來並且命令將退出非零。

因此,您可以將它與提到的其他工具之一的 output 結合起來,遍歷孤立包的候選者,一個一個地刪除它們,並在每次更改之間測試 output。 然后執行npm uninstall --save以提交未產生錯誤的錯誤,或npm install回滾錯誤。 這可以是自動化的,但我將把它作為練習留給讀者。

檢查同行部門

驗證是否滿足所有頂級依賴項的 peerDependency 要求。

安裝

你可以在你的系統上安裝它:

npm i -g check-peer-deps

請注意,此實用程序需要 npm 可用。

用法

只需切換到您希望檢查 peerDependencies 的項目目錄並運行程序。

cd foobar

檢查同行部門

如果滿足所有頂級 peerDependencies 的最低版本,則不會有 output,否則您將看到類似以下內容:

check-peer-deps 找不到滿足 eslint-config-airbnb-base 的 peerDependency 的“eslint@^4.9.0”的依賴項:當前。 eslint@^4.6?0 Package 依賴能否滿足peerDependency? 是的

這告訴你 eslint-config-airbnb-base 需要 eslint@^4.9.0 作為 peerDependency,但該項目目前只指定 eslint@^4.6.0,如果安裝了 eslint@4.6.0,可能會出現問題並且在安裝之前沒有更新。 output 也告訴你,雖然最低允許版本太低,但最高允許版本確實滿足 peerDependencies 要求。

安裝-peers-cli

CLI 安裝項目的 peerDependencies,沒有副作用。 適用於 npm,紗線。 支持紗線工作區流。

安裝紗線

$紗線添加--dev install-peers-cli npm

$ npm install --save-dev install-peers-cli

添加 package.json 腳本:

{“腳本”:{“安裝對等體”:“安裝對等體”}}

然后運行 yarn install-peers(或 npm run install-peers)來安裝項目的對等依賴項。 它不會更新鎖定文件或修改 package.json,讓您的設置保持純凈。 根據您的用例,可以使用任何其他生命周期腳本。

由於 npm/yarn 的安裝流程,您仍然可能在常規安裝階段看到“未滿足對等依賴性”警告。

執行npm install后,將有一個名為 package-lock.json 的文件。 通過分析package-lock.json文件,可以了解每個package的依賴關系。 更多細節可以參考這個博客。

package 的正確運行需要 package 的依賴關系。 但是有一些可選的依賴項,可以跳過。 您可以在安裝時使用--no-optional參數,這樣就不會安裝這些額外的包。 但請確保您的應用程序在沒有這些可選包的情況下運行良好。

暫無
暫無

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

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