首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别哪些npm包只是对等依赖关系?

如何识别哪些npm包只是对等依赖关系?
EN

Stack Overflow用户
提问于 2019-09-24 22:41:09
回答 3查看 2K关注 0票数 6

我正在尝试从一些项目的package.json文件中删除未使用的包,但我遇到了对等依赖的问题。有一些工具,比如depcheck,它试图列出所有“未使用”的包,但它不能区分实际未使用的包和未使用的包,因为它们是对等依赖项。

有没有一个包,或者一些我不熟悉的npm命令,可以让我列出项目中的所有对等依赖关系,或者至少允许我输入一个包名称,看看是否安装了那个包,因为它是另一个包的对等依赖关系?

对于后人来说,这里是我的一个项目的依赖项的示例。例如,在这个项目中,我知道reflect-metadata@nestjs/common的对等依赖项,但我是在卸载它后才发现这一点的。

代码语言:javascript
复制
"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"
  },
EN

回答 3

Stack Overflow用户

发布于 2019-12-03 06:30:12

这是一个很好的问题,不确定它为什么会被否决。不幸的是,我不知道现有的,很好的自动化的方式来做这件事。

你可以像这样测试一个单独的包:

代码语言:javascript
复制
npm uninstall some-package && npm ls

如果存在任何对等依赖关系冲突,则会将其打印出来,并且命令将退出非零值。

因此,您可以将其与提到的其他工具之一的输出组合在一起,遍历孤立包的候选,逐个删除它们,并在每次更改之间测试输出。然后执行npm uninstall --save以提交未产生错误的文件,或执行npm install以回滚产生错误的文件。这可以是自动化的,但我将把它作为练习留给读者。

票数 1
EN

Stack Overflow用户

发布于 2019-09-25 01:27:53

check-peer-deps

验证是否满足所有顶级依赖项的参数peerDependency要求。

Installation

您可以使用以下命令将其安装到您的系统上:

npm:i-g-check-peer-deps

请注意,此实用程序需要npm版本才可用。

用法

只需切换到您希望检查其peerDependencies的项目的目录,然后运行程序即可。

-cd-foobar

*check-peer-deps

如果满足所有顶级peerDependencies的最低版本,则不会有输出,否则您将看到类似以下内容:

检查-对等删除满足eslint- peerDependency -airbnb-base的'eslint@^4.9.0‘的依赖项未找到!当前: eslint@^4.6.0软件包依赖项可以满足peerDependency?是

这会告诉您,config config-airbnb-base需要将*eslint@^4.9.0作为一个新的peerDependency,但该项目当前仅指定了*eslint@^4.6.0,如果安装了@4.6.0,并且在安装之前没有进行更新,则会出现潜在问题。输出还会告诉您,尽管允许的最低版本太低,但允许的最大版本确实满足的要求。

install-peers-cli

安装项目的peerDependencies的命令行界面,没有副作用。与npm,yarn一起工作。支持纱线工作空间流。

安装纱线

$ yarn add --dev install-peers cli npm

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

用法添加package.json脚本:

{ "scripts":{“install-peer”:“install-peer”}}

然后运行yarn install-peers (或npm run install-peers)来安装项目的对等依赖项。它不会更新锁定文件或修改package.json,使您的设置保持干净。根据您的用例,可以使用任何其他生命周期脚本。

由于npm/yarn的安装流程,在常规安装阶段,您可能仍会看到“未满足对等依赖项”警告。

票数 -1
EN

Stack Overflow用户

发布于 2019-09-24 22:52:05

执行npm install之后,将会有一个名为package-lock.json的文件。通过分析package-lock.json文件,您可以了解每个包的依赖关系。有关更多详细信息,请参阅this博客。

包的依赖项是包正确运行所必需的。但也有一些可选的依赖项,可以跳过。您可以在安装时使用--no-optional参数,这样就不会安装这些额外的软件包。但请确保您的应用程序在没有这些可选包的情况下工作正常。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58082826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档