Как удалить избыточные / неиспользуемые зависимости из package.json?

#javascript #node.js #reactjs #npm #yarnpkg

#javascript #node.js #reactjs #npm #yarnpkg

Вопрос:

Я знаю, что об этом спрашивали раньше, но depcheck, похоже, у меня вообще не работает. Это дает мне массу ложных предупреждений, помимо необходимости настраивать его для библиотек «только для конфигурации», таких как babel, eslint и т.д.

Каков ваш подход, если вы получаете подобную задачу? Есть ли какая-нибудь лучшая практика, которую вы могли бы мне порекомендовать?

Спасибо!

Комментарии:

1. Вы пробовали yarn autoclean ?

2. Спасибо за подсказку. Похоже, что он удаляет избыточные файлы только из node_modules. То, что я ищу, это то, что также удаляет их из моего package.json или, по крайней мере, выводит список зависимостей, которые нигде не используются.

3. долгий путь, который может быть самым надежным, — это удалить node_modules, запустить приложение и медленно добавлять deps обратно по мере необходимости, пока приложение не запустится. Я бы просто сказал, следите за версиями, которые использовались, потому что вы не хотите вносить какие-либо критические изменения при этом.

4. Достаточно справедливо. Я надеюсь, что это увидит старший мастер javascript, который мог бы дать мне серебряную пулю 🙂

5. Это отличный инструмент для разработки, если он не существует 😉

Ответ №1:

Ответ — npm-проверка.

 npm i -g npm-check
  

Затем войдите в каталог вашего проекта и запустите инструмент

 cd my-app
npm-check


some-package 😕  NOTUSED?
             To remove this package: npm uninstall --save some-package
  

Комментарии:

1. npm-check похоже, что он просто используется depcheck внутренне для теста неиспользуемого пакета, и в моем тестировании в каждом из них появляются одинаковые ложные срабатывания.

Ответ №2:

Мы используем depcheck с Python для изоляции ключа package.json dependencies .

 import json
from sys import platform
from subprocess import run

div = "=================================="
use_shell = platform == "win32"

print(f"nFinding unused dependenciesn{div}n")

cmd = ["npx", "depcheck", "--json"]
depcheck_result = run(cmd, shell=use_shell, capture_output=True, text=True)

unused_dependencies = json.loads(depcheck_result.stdout)["dependencies"]
if len(unused_dependencies) > 0:
    print(f"Found these unused dependenciesn{div}")
    print(*unused_dependencies, sep="n")

    affirmative_responses = {"y", "yes", "Y", "YES", ""}
    response = input(f"{div}nnRemove all? [yes] ").lower() in affirmative_responses

    if response == True:
        cmd = ["yarn", "remove", *unused_dependencies]
        run(cmd, shell=use_shell)

    print(f"nDone!n{div}n")

else:
    print(f"nDone! - No unused dependencies found.n{div}n")