如何找到npm重复包?

jac*_*hai 14 javascript node.js npm

npm dedupe可以展平文件夹结构.但是,在这之前.我希望看到一个重复包的列表,以便我知道是否继续前进.有这样的功能吗?如果没有,是否有某种脚本可以帮助我实现这一目标?

mzu*_*lch 19

试试这个:

 npm ls --parseable | xargs -L1 sh -c 'basename $1' dummy | sort | uniq -c | grep -v "^ *1 " | sort -rn
Run Code Online (Sandbox Code Playgroud)

这里的管道是:

  1. 以可分析的格式列出包
  2. 将每个路径向下拖动到仅包名称
  3. 按字母顺序对包名称进行排序,以准备计算唯一名称
  4. 分组和统计唯一的包名称
  5. 隐藏不重复的包(count = 1)
  6. 按出现次数递减排序

  • 是的 -L1 更兼容,尽管 -l 在我的测试系统(Ubuntu 12.04)上也受支持,我已经编辑了答案。 (2认同)
  • 要包含版本,可以使用`npm ls --parseable --long | 切-d':'-f2 | 排序| uniq -c`来查看每个版本的软件包所依赖的次数。这对于查找正在使用软件包的v1.0.0和v2.0.0的位置很有用(因为不同的软件包取决于不同的版本)。 (2认同)
  • 这个答案不能正确处理命名空间包,例如“@babel/core”。相反,我使用以下命令:`npm ls | grep -v“重复数据删除”| grep -oe“\S*@”| sed 's/.$//' | sed 's/.$//' | 排序| uniq-c| 排序-rn` (2认同)

Tam*_*lyn 5

尝试find-duplicate-dependencies。除了版本之外,它还向您显示了重复项的简化路径:

$ find-duplicate-dependencies
This package has the following duplicate dependencies:

regenerator-runtime :
[ { name: 'regenerator-runtime',
    version: '0.11.1',
    from: undefined,
    path: 'project/react-select/emotion/babel-plugin-emotion/babel-core/babel-runtime' },
  { name: 'regenerator-runtime',
    version: '0.12.1',
    from: undefined,
    path: 'project/recompose/@babel/runtime' } ]
Run Code Online (Sandbox Code Playgroud)