Чи є спосіб просто видалити всі невикористані (незадекларовані) залежності від проекту Node.js (ті, які більше не визначені в моєму package.json
.) Коли я оновлюю свою програму, мені подобається автоматично видаляти нерозв'язані пакети.
Чи є спосіб просто видалити всі невикористані (незадекларовані) залежності від проекту Node.js (ті, які більше не визначені в моєму package.json
.) Коли я оновлюю свою програму, мені подобається автоматично видаляти нерозв'язані пакети.
Відповіді:
Примітка . Останні npm
версії роблять це автоматично, коли ввімкнено блокування пакетів, тому це не потрібно, за винятком видалення пакетів розробки з --production
прапором.
Запустіть, npm prune
щоб видалити модулі, не вказані в package.json
.
Від npm help prune
:
Ця команда видаляє "сторонні" пакети. Якщо вказано ім'я пакета, то видаляються лише пакети, що відповідають одному із поданих імен.
Сторонні пакети - це пакети, які не вказані у списку залежностей батьківського пакету.
Якщо
--production
прапор вказаний, ця команда видалить пакети, вказані у ваших devDependitions.
package.json
. Це так? Отже, наступне оновлення чи встановлення доведеться перевстановити.
node_modules
каталозі модуля , тому вони видаляються разом з модулем.
package.json
, але залишаю шару. Коли я біжу npm prune
, я очікую, що вся карма, включаючи власну node_modules
папку, що містить її залежності, буде видалена. Як щодо залежностей бауера (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 змінна середовища для виробництва , ця команда видалить пакети , зазначені в ваших devDependencies . Налаштування - no-production не призведе до того, що NODE_ENV буде встановлено на виробництво .
Якщо використовується прапор --dry run , то фактично ніяких змін не буде зроблено.
Якщо використовується прапор --json , то зміни npm prune, зроблені (або зроблені з --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
?