Answers:
您可以使用称为depcheck的npm模块(至少需要Node版本10)。
安装模块:
npm install depcheck -g
or
yarn global add depcheck
运行它并找到未使用的依赖项:
depcheck
这种方法的好处是您不必记住find
or grep
命令。
要运行而不安装,请使用npx:
npx depcheck
depcheck
列出了每个软件包unused
都是错误的
还有一个名为的软件包npm-check
:
npm检查
检查过时,不正确和未使用的依赖项。
它功能强大且积极开发。它的功能之一是检查未使用的依赖关系-对于这一部分,它使用depcheck
另一个答案中提到的模块。
npm outdated
检查并列出当前,需要和最新的软件包版本。没有未使用的软件包列表。
如果您使用的是类Unix操作系统(Linux操作系统,OSX等),那么你可以使用的组合find
和egrep
搜索需要您的包名的语句:
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存储库中...
.jsx
文件和.ts
文件等呢:D
fiskeben写道:
缺点是它不是全自动的,即它不会从package.json中提取包名称并进行检查。您需要自己为每个程序包执行此操作。
如果由于某种原因depcheck
无法正常工作,让我们让菲斯克本的答案自动化!(例如,我用Typescript尝试过,它给出了不必要的解析错误)
为了进行解析,package.json
我们可以使用该软件jq
。下面的Shell脚本需要一个目录名称(从此处开始)。
#!/bin/bash
DIRNAME=${1:-.}
cd $DIRNAME
FILES=$(mktemp)
PACKAGES=$(mktemp)
find . \
-path ./node_modules -prune -or \
-path ./build -prune -or \
\( -name "*.ts" -or -name "*.js" -or -name "*.json" \) -print > $FILES
function check {
cat package.json \
| jq "{} + .$1 | keys" \
| sed -n 's/.*"\(.*\)".*/\1/p' > $PACKAGES
echo "--------------------------"
echo "Checking $1..."
while read PACKAGE
do
RES=$(cat $FILES | xargs -I {} egrep -i "(import|require).*['\"]$PACKAGE[\"']" '{}' | 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"
首先,它创建两个临时文件,我们可以在其中缓存程序包名称和文件。
它从find
命令开始。第一和第二行使其忽略node_modules
和build
文件夹(或任何您想要的文件)。第三行包含允许的扩展名,您可以在此处添加更多扩展名,例如JSX或JSON文件。
一个函数将读取依赖类型。
首先cat
是package.json
。然后,jq
获取所需的依赖项组。({} +
在那里,如果文件中没有对等项依赖关系,它将不会引发错误。)
之后,sed
提取引号之间的部分,即软件包名称。-n
并.../p
告诉它打印匹配的部分,而不会jq
输出JSON输出中的其他内容。然后,我们将此软件包名称列表读入while
循环。
RES
是用引号引起的包名称的出现次数。现在是import
/ require
... 'package'
/ "package"
。在大多数情况下,它都能胜任。
然后,我们只计算结果行的数量,然后打印结果。
注意事项:
tsconfig.json
文件(lib
选项)grep
手动输入^USED
和UNUSED
文件。这里的许多答案是如何找到未使用的物品。
我想自动删除它们。
安装此节点项目。
$ npm install -g typescript tslint tslint-etc
在根目录下,添加一个新文件tslint-imports.json
{
"extends": [
"tslint-etc"
],
"rules": {
"no-unused-declaration": true
}
}
运行此程序需您自担风险,进行备份:)
$ tslint --config tslint-imports.json --fix --project .
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm