是否有一种方法可以确定您的包中是否有包。Json文件,不再需要?

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

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


当前回答

这里的许多答案都是关于如何只找到未使用的物品。

如果. .我想…

自动——a)找到+ b)删除不使用的项目

选项2,下面似乎是较新的方式。


选项1:

安装该节点项目。

 $ 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 .

选项2:根据@Alex和@JacopKane的建议,谢谢

// newer one line option
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm

// or
npm uninstall $(npx depcheck --oneline)

其他回答

gombog的脚本比npm-check要好得多。 我做了一点修改,所以node_modules中的devdependencies也会被找到。 示例sass从未使用过,但在sass-loader中需要

#!/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

这里的许多答案都是关于如何只找到未使用的物品。

如果. .我想…

自动——a)找到+ b)删除不使用的项目

选项2,下面似乎是较新的方式。


选项1:

安装该节点项目。

 $ 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 .

选项2:根据@Alex和@JacopKane的建议,谢谢

// newer one line option
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm

// or
npm uninstall $(npx depcheck --oneline)

如果你使用的是类似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")' {} \;

or

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

缺点是它不是全自动的,也就是说它不能从包中提取包名。Json并检查它们。您需要自己为每个包执行此操作。因为包。json只是json,这可以通过编写一个使用child_process的小脚本来纠正。为每个依赖项运行此命令。让它成为一个模块。并将其添加到NPM回购…

你可以使用一个叫做depcheck的npm模块(至少需要Node的10版本)。

安装模块: NPM安装depcheck -g 或 纱线全局添加depcheck 运行它并找到未使用的依赖项: depcheck

这种方法的优点是您不必记住find或grep命令。

要运行而不安装使用npx:

npx depcheck 

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

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