NPM:为什么要安装此软件包?

时间:2016-03-17 00:34:53

标签: node.js npm

如何确定特定软件包的安装原因?换句话说,什么包依赖于这个包?

有问题的包裹是babelify。 npm ls在顶层显示它,但它在任何地方都没有包含在package.json中。

6 个答案:

答案 0 :(得分:3)

npm explain <package name> 正是您要找的。它通过显示“自下而上”视图来解释一个包为什么在您的 node_modules 文件夹中。查看文档 here

答案 1 :(得分:1)

如果找不到requireimport,请尝试查看孩子package.json,看看还有谁需要它。

(注意:find需要Linux / macOS,这在Windows上不起作用)

find . -name package.json -exec grep -l babelify /dev/null {} \;

./node_modules/browserify-zlib/package.json
./node_modules/cssnext/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/reporter/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/node_modules/@cypress/browserify-preprocessor/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/node_modules/async/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/node_modules/babel-core/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/node_modules/babelify/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/node_modules/getos/node_modules/async/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/node_modules/object-assign/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/node_modules/watchify/node_modules/browserify-zlib/package.json
./node_modules/cypress/dist/Cypress.app/Contents/Resources/app/packages/server/package.json
./node_modules/eslint/package.json
./node_modules/extract-text-webpack-plugin/node_modules/async/package.json
./node_modules/getos/node_modules/async/package.json
./node_modules/postcss-modules-extract-imports/package.json
./node_modules/postcss-modules-scope/package.json
./node_modules/webpack/node_modules/async/package.json

答案 2 :(得分:1)

您提到过,npm ls显示了软件包及其依赖性:

> npm ls leveldown
appless@5.0.0 C:\Users\mikem\Code\appless
`-- @architect/architect@5.7.0
  `-- dynalite@2.2.0
    `-- UNMET OPTIONAL DEPENDENCY leveldown@4.0.2

如果npm ls在顶层显示,并且它不是顶层package.json的依赖项,则以前可能是必需的,现在不再使用。

使用npm prune to remove the unused package

答案 3 :(得分:0)

有一个名为npm-why的模块,用于标识安装软件包的原因。

当然,如果您使用的是yarn,则有一个内置命令yarn why

答案 4 :(得分:0)

我的一线话,基于其他答案:npm ls | grep -C 10 PACKAGE

用您要寻找的包装代替包装。这比其他建议更简单,更快捷。贝壳是你的朋友,朋友!

故障/说明

  • npm ls-如上所述,这将打印应用程序的依赖关系树表示形式。
  • |-* nix贝壳的秘密调味料。这会将输出发送到下一个程序,而不是打印它。
  • grep [...] PACKAGE-搜索字符串“ PACKAGE”(这实际上是正则表达式,但这无关紧要。)
  • -C 10-这告诉grep在匹配的行周围打印10条额外的行。没有这个,grep将只打印找到PACKAGE的行。增加此数字将为您提供更多上下文。如果-C在您的系统上不起作用(较不常见的linux版本),请尝试使用-B 10 -A 10。这是做同样事情的一种更冗长的方法:“前10行,后10行。”

答案 5 :(得分:-3)

您可以针对require("babelify")对项目进行全局搜索。如果您在项目中的任何位置找不到它,这可能意味着不需要此依赖项,并且可以安全地从node_modules文件夹中删除它。

请注意,如果您执行npm install babelify,则不会在package.json中添加引用。您必须npm install --save-dev babelify才能在package.json文件上引用此依赖关系。