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

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

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


当前回答

用于检查未使用的依赖项,库和未导入的文件

 npx unimported 

其他回答

在Yarn 2。X及以上,使用:

yarn dlx depcheck

Yarn DLX被设计用来执行一次性脚本,这些脚本可能已经在Yarn 1.x中作为全局包安装。管理系统级包超出了yarn的范围。为了反映这一点,yarn全局已被删除。

来源:https://yarnpkg.com/getting-started/migration use-yarn-dlx-instead-of-yarn-global

除非我误解了gombog和nMo的脚本。这里有一个更快的nMo脚本扩展版本,默认为'find',但可以很容易地修改为使用'fd'查找功能。

不同之处在于,它首先查找所有相关文件,然后从所有相关文件中一次性找到grep包,而不是一个文件一个文件地查找。

可控制并发性,默认为8。

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

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

export NUMCONCURRENT=8

function findCmd {
  startPath=${1:-.}
  find "$startPath" \
    -path ./node_modules -prune -or \
    -path ./build -prune -or \
    \( -name "*.ts" -or -name "*.js" -or -name "*.json" \) -print
}

# use fd
# https://github.com/sharkdp/fd
function findCmd_fd {
  startPath=${1:-.}
  fd  -t f '(js|ts|json)$' "$startPath"
}



function check {
    cat package.json \
        | jq "{} + .$1 | keys" \
        | sed -n 's/.*"\(.*\)".*/\1/p' > "$PACKAGES"
    echo "--------------------------"
    echo "Checking $1..."

    findCmd > "$FILES"
    while read PACKAGE
    do
        #echo "node_modules/${PACKAGE}"
        if [ -d "node_modules/${PACKAGE}" ]; then
                findCmd node_modules/${PACKAGE} >> $FILES
        fi
    done < $PACKAGES
    export FILES
    export SQ="'"
    xargs -P ${NUMCONCURRENT:-1} -r -a  "$PACKAGES" -I[] bash -c '
        PACKAGE="[]"

        RES=$(cat "$FILES" | xargs -r egrep -i "(import|require|loader|plugins|${PACKAGE}).*[\"${SQ}](${PACKAGE}|.?\d+)[\"${SQ}]" | wc -l)

        if [ $RES = 0 ]
        then
            echo -e "UNUSED\t\t $PACKAGE"
        else
            echo -e "USED ($RES)\t $PACKAGE"
        fi
    '
    [ -f  "$PACKAGES" ] && rm "$PACKAGES"
    [ -f  "$FILES" ] && rm "$FILES"
}

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

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

如果. .我想…

自动——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)

我已经创建了一个包unused-package (https://www.npmjs.com/package/unused-package),它返回任何未使用的包,或者如果包是devDependency,但作为正常依赖项安装

创建一个文件并将此代码添加到您的文件中

const check = require("unused-package");

check({ entries: ['entry path to your code'] }).then((res) => {
  console.log(res) // list of packages returned by library
});

used-package相对于depcheck包的一个优点是unused-package支持多个入口路径。

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

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