有没有办法确定您的package.json
文件中是否有不再需要的包?
例如,当尝试一个包,然后注释或删除代码,但忘记卸载它时,我最终得到了几个可以删除的包。
确定包是否可以安全删除的有效方法是什么?
发布于 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
发布于 2014-03-27 17:08:47
如果您使用的是Unix之类的操作系统(Linux、OSX等),那么您可以结合使用find
和egrep
来搜索包含您的包名的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代码库...
发布于 2019-04-24 14:07:49
我们可以使用下面的npm模块来实现此目的:
https://stackoverflow.com/questions/22675725
复制相似问题