首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在package.json中查找未使用的npm包

在package.json中查找未使用的npm包
EN

Stack Overflow用户
提问于 2014-03-27 08:10:46
回答 5查看 163.7K关注 0票数 385

有没有办法确定您的package.json文件中是否有不再需要的包?

例如,当尝试一个包,然后注释或删除代码,但忘记卸载它时,我最终得到了几个可以删除的包。

确定包是否可以安全删除的有效方法是什么?

EN

回答 5

Stack Overflow用户

发布于 2020-10-28 05:21:41

来自gombosg的脚本比npm-check要好得多。

我做了一点修改,所以也会发现node_modules中的依赖项。

从未使用过但在sass-loader中需要的示例sass

#!/bin/bash
DIRNAME=${1:-.}
cd $DIRNAME

FILES=$(mktemp)
PACKAGES=$(mktemp)

# use fd
# https://github.com/sharkdp/fd

function check {
    cat package.json \
        | jq "{} + .$1 | keys" \
        | sed -n 's/.*"\(.*\)".*/\1/p' > $PACKAGES
    echo "--------------------------"
    echo "Checking $1..."
    fd '(js|ts|json)$' -t f > $FILES
    while read PACKAGE
    do
        if [ -d "node_modules/${PACKAGE}" ]; then
            fd  -t f '(js|ts|json)$' node_modules/${PACKAGE} >> $FILES
        fi
        RES=$(cat $FILES | xargs -I {} egrep -i "(import|require|loader|plugins|${PACKAGE}).*['\"](${PACKAGE}|.?\d+)[\"']" '{}' | wc -l)

        if [ $RES = 0 ]
        then
            echo -e "UNUSED\t\t $PACKAGE"
        else
            echo -e "USED ($RES)\t $PACKAGE"
        fi
    done < $PACKAGES
}

check "dependencies"
check "devDependencies"
check "peerDependencies"

原始脚本的结果:

--------------------------
Checking dependencies...
UNUSED           jquery
--------------------------
Checking devDependencies...
UNUSED           @types/jquery
UNUSED           @types/jqueryui
USED (1)         autoprefixer
USED (1)         awesome-typescript-loader
USED (1)         cache-loader
USED (1)         css-loader
USED (1)         d3
USED (1)         mini-css-extract-plugin
USED (1)         postcss-loader
UNUSED           sass
USED (1)         sass-loader
USED (1)         terser-webpack-plugin
UNUSED           typescript
UNUSED           webpack
UNUSED           webpack-cli
USED (1)         webpack-fix-style-only-entries

和修改后的:

Checking dependencies...
USED (5)         jquery
--------------------------
Checking devDependencies...
UNUSED           @types/jquery
UNUSED           @types/jqueryui
USED (1)         autoprefixer
USED (1)         awesome-typescript-loader
USED (1)         cache-loader
USED (1)         css-loader
USED (2)         d3
USED (1)         mini-css-extract-plugin
USED (1)         postcss-loader
USED (3)         sass
USED (1)         sass-loader
USED (1)         terser-webpack-plugin
USED (16)        typescript
USED (16)        webpack
USED (2)         webpack-cli
USED (2)         webpack-fix-style-only-entries
票数 7
EN

Stack Overflow用户

发布于 2014-03-27 17:08:47

如果您使用的是Unix之类的操作系统(Linux、OSX等),那么您可以结合使用findegrep来搜索包含您的包名的require语句:

find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni 'name-of-package' {} \;

如果搜索整个require('name-of-package')语句,请记住使用正确类型的引号:

find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni 'require("name-of-package")' {} \;

find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni "require('name-of-package')" {} \;

缺点是它不是完全自动的,也就是说,它不会从package.json中提取包名称并检查它们。您需要自己为每个包执行此操作。由于package.json只是JSON,因此可以通过编写一个小脚本来解决这个问题,该脚本使用child_process.exec为每个依赖项运行此命令。并使其成为一个模块。并将其添加到NPM代码库...

票数 6
EN

Stack Overflow用户

发布于 2019-04-24 14:07:49

我们可以使用下面的npm模块来实现此目的:

https://www.npmjs.com/package/npm-check-unused

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

https://stackoverflow.com/questions/22675725

复制
相关文章

相似问题

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