Есть ли способ просто удалить все неиспользуемые (необъявленные) зависимости из проекта 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
?