Как найти неиспользуемые пакеты в package.json?
Заголовок: Как определить, есть ли ненужные пакеты в файле package.json
?
Текст вопроса: Есть ли способ определить, есть ли в моем файле package.json
пакеты, которые больше не нужны?
Например, при тестировании пакета я могу попробовать его использовать, а затем закомментировать или удалить код, не успев удалить сам пакет. В результате у меня остается несколько пакетов, которые потенциально можно удалить.
Каким образом можно эффективно определить, может ли пакет быть безопасно удалён?
5 ответ(ов)
Существует множество ответов, касающихся только поиска неиспользуемых элементов. А что, если... я хочу АВТОМАТИЧЕСКИ - а) найти + б) удалить неиспользуемые элементы?
Второй вариант, представленный ниже, кажется, является более современным решением.
Вариант 1:
- Установите этот проект Node.
$ 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, спасибо):
// более современный однострочный вариант
npx depcheck --json | jq '.dependencies[]' | xargs -L1 npm rm
// или
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")' {} \;
или
find . -path ./node_modules -prune -o -name "*.js" -exec egrep -ni "require('name-of-package')" {} \;
Недостаток этого подхода в том, что он не полностью автоматизирован, т.е. он не извлекает имена пакетов из package.json
и не проверяет их. Вам нужно будет делать это для каждого пакета вручную. Поскольку package.json
— это простой JSON, вы можете написать небольшой скрипт, который использует child_process.exec
, чтобы запускать эту команду для каждой зависимости. И сделать это модулем. И добавить его в репозиторий NPM...
В Yarn 2.x и выше используйте:
yarn dlx depcheck
Команда
yarn dlx
предназначена для выполнения одноразовых скриптов, которые могли быть установлены как глобальные пакеты в Yarn 1.x. Управление пакетами на уровне системы выходит за рамки задач Yarn. В связи с этим командаyarn global
была удалена.
Источник: Yarn - Переход на Yarn 2
Для этой цели мы можем использовать следующий npm модуль:
https://www.npmjs.com/package/npm-check-unused
Этот модуль поможет вам проверить, какие зависимости в вашем проекте не используются, и упростит процесс очистки.
Если вы хотите выбрать, на чьих плечах гигантов вы будете стоять
Вот ссылка для генерации короткого списка доступных пакетов npm; она фильтрует по ключевым словам неиспользуемые пакеты
.
https://www.npmjs.com/search?q=unused%20packages
Почему мой ответ - это всего лишь ссылка?
Обычно я бы не предоставлял только ссылку. Этот вопрос заслуживает более своевременного ответа. Решение зависит от актуального программного обеспечения. Рекомендация конкретного ПО, которое могло перестать поддерживаться (что касается некоторых из упомянутых здесь рекомендаций), мало чему помогает. Поэтому иметь возможность помочь людям найти что-то актуальное кажется разумным.
В чем разница между тильдой (~) и каретом (^) в package.json?
Как задать переменные окружения из файла package.json?
Как узнать версию установленного npm пакета?
В чем разница между --save и --save-dev?
Как использовать исполняемые файлы из пакета, установленного локально в node_modules?