Есть ли способ просто удалить все неиспользуемые (необъявленные) зависимости из проекта Node.js. (те, которые больше не определены в моем package.json
.) Когда я обновляю свое приложение, мне нравится автоматически удалять несвязанные пакеты.
414
node_modules
когда они удалены из соответствующихpackage.json
?Ответы:
Примечание . Последние
npm
версии делают это автоматически, когда включены блокировки пакетов, поэтому в этом нет необходимости, за исключением удаления пакетов разработки с--production
флагом.Запустите
npm prune
для удаления модулей, не перечисленных вpackage.json
.От
npm help prune
:источник
package.json
. Это правильно? Итак, при следующем обновлении или установке их придется переустановить.node_modules
директории модуля , поэтому они удаляются вместе с модулем.package.json
, но оставляю беседку. Когда я запускаюnpm prune
, я ожидаю, что вся карма, включая ее собственнуюnode_modules
папку с зависимостями, будет удалена. Как насчет зависимостей bower (bower-json, bower-logger, chmodr, fstream, glob и др.). Технически, они не перечислены в моем проектеpackage.json
. Те удалены или нет?node_modules
, а внутриnode_modules/bower/node_modules
, «защищены»node_modules/bower/package.json
. Зависимости вашего пакета и зависимости вашего пакета не смешаны .Если вы не беспокоитесь о том, чтобы сделать это пару минут, можно будет снова
rm -rf node_modules
иnpm install
снова перестроить локальные модули.источник
node_modules
также проверяет, чтоpackage.json
файл описывает воспроизводимый граф зависимостей. Удаление и переустановка -node_modules
это в основном тест развертывания.npm prune
не помог ни на йоту, но это помогло. Моя проблема была сломана символическая ссылка.Вы можете использовать npm-prune для удаления посторонних пакетов.
Эта команда удаляет «посторонние» пакеты. Если указано имя пакета, удаляются только пакеты, соответствующие одному из предоставленных имен.
Посторонние пакеты - это пакеты, которые не перечислены в списке зависимостей родительского пакета.
Если указан флаг --production или для переменной среды NODE_ENV задано значение production , эта команда удалит пакеты, указанные в ваших devDependencies . Установка --no-production отменяет установку NODE_ENV на производство .
Если используется флаг --dry-run, то никаких изменений фактически не будет.
Если используется флаг --json, то изменения, внесенные в npm (или сделанные с помощью --dry-run ), будут напечатаны как объект JSON.
При нормальной работе с включенными блокировками пакетов посторонние модули автоматически удаляются при установке модулей, и вам понадобится только эта команда с флагом --production .
Если вы отключили блокировки пакетов, посторонние модули не будут удалены, и вы можете время от времени запускать npm prune для их удаления.
Используйте npm-dedupe, чтобы уменьшить дублирование
Выполняет поиск в локальном дереве пакетов и пытается упростить общую структуру, перемещая зависимости дальше вверх по дереву, где они могут более эффективно использоваться несколькими зависимыми пакетами.
Например, рассмотрим этот график зависимости:
В этом случае npm-dedupe преобразует дерево в:
Из-за иерархической природы поиска модулей узла, b и d будут получать свою зависимость, встречаемую одним пакетом c на корневом уровне дерева.
Алгоритм дедупликации обходит дерево, перемещая каждую зависимость как можно выше в дереве, даже если дубликаты не найдены. Это приведет как к плоскому, так и к дедуплицированному дереву.
источник