Есть ли способ просто удалить все неиспользуемые (необъявленные) зависимости из проекта Node.js. (те, которые больше не определены в моем package.json.) Когда я обновляю свое приложение, мне нравится автоматически удалять несвязанные пакеты.
Есть ли способ просто удалить все неиспользуемые (необъявленные) зависимости из проекта Node.js. (те, которые больше не определены в моем package.json.) Когда я обновляю свое приложение, мне нравится автоматически удалять несвязанные пакеты.
Ответы:
Примечание . Последние npmверсии делают это автоматически, когда включены блокировки пакетов, поэтому в этом нет необходимости, за исключением удаления пакетов разработки с --productionфлагом.
Запустите npm pruneдля удаления модулей, не перечисленных в package.json.
От npm help prune:
Эта команда удаляет «посторонние» пакеты. Если указано имя пакета, удаляются только пакеты, соответствующие одному из предоставленных имен.
Посторонние пакеты - это пакеты, которые не перечислены в списке зависимостей родительского пакета.
Если
--productionуказан флаг, эта команда удалит пакеты, указанные в ваших devDependencies.
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 [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]
Эта команда удаляет «посторонние» пакеты. Если указано имя пакета, удаляются только пакеты, соответствующие одному из предоставленных имен.
Посторонние пакеты - это пакеты, которые не перечислены в списке зависимостей родительского пакета.
Если указан флаг --production или для переменной среды NODE_ENV задано значение production , эта команда удалит пакеты, указанные в ваших devDependencies . Установка --no-production отменяет установку NODE_ENV на производство .
Если используется флаг --dry-run, то никаких изменений фактически не будет.
Если используется флаг --json, то изменения, внесенные в npm (или сделанные с помощью --dry-run ), будут напечатаны как объект JSON.
При нормальной работе с включенными блокировками пакетов посторонние модули автоматически удаляются при установке модулей, и вам понадобится только эта команда с флагом --production .
Если вы отключили блокировки пакетов, посторонние модули не будут удалены, и вы можете время от времени запускать npm prune для их удаления.
npm dedupe
npm ddp
Выполняет поиск в локальном дереве пакетов и пытается упростить общую структуру, перемещая зависимости дальше вверх по дереву, где они могут более эффективно использоваться несколькими зависимыми пакетами.
Например, рассмотрим этот график зависимости:
a
+-- b <-- depends on c@1.0.x
| `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- c@1.0.10
В этом случае npm-dedupe преобразует дерево в:
a
+-- b
+-- d
`-- c@1.0.10
Из-за иерархической природы поиска модулей узла, b и d будут получать свою зависимость, встречаемую одним пакетом c на корневом уровне дерева.
Алгоритм дедупликации обходит дерево, перемещая каждую зависимость как можно выше в дереве, даже если дубликаты не найдены. Это приведет как к плоскому, так и к дедуплицированному дереву.
node_modulesкогда они удалены из соответствующихpackage.json?