Автоматично видаляти залежності з package.json під час використання видалення npm


84

Після того, як npm initя можу додати залежності в мій пакет.json, використовуючи це:

npm install package --save

І скажіть, я хочу uninstallпакет, і я роблю це, роблячи:

npm uninstall package

але я хочу, щоб мій пакет.json також відповідно оновлювався, і мені не потрібно вручну переходити до файлу та видаляти цей рядок.

З документації npm написано:

Він суворо адитивний, тому не видаляє параметри з вашого package.json без дійсно вагомих причин для цього.

Отже, я просто хотів дізнатися, чи можливо це взагалі.


Оскільки мої залежності автоматично додаються до package.json кожного разу, коли я встановлюю за допомогою прапора (--save), мені було цікаво, чи є спосіб видалити залежності з package.json кожного разу, коли я також видаляю пакет.
крик

Відповіді:


150

Використовуйте той самий --saveпрапор. Якщо ви встановили залежність за допомогою:

$> npm install grunt-cli --save

Ви можете видалити його, оновивши пакет.json, використовуючи:

$> npm uninstall grunt-cli --save

Прапор "зберегти" повідомляє npm оновлювати package.json на основі операції, яку ви щойно зробили.


3
Я використовую npm з ember-cli, і мені довелося використовувати --save-devзамість --save.
gerry3

4
якщо ви встановили його за допомогою --save-dev, то видалення також є --save-dev, оскільки --save зберігає у dependenciesрозділі файлу package.json, тоді як --save-dev збереже у devDependenciesрозділі
Mike ' Pomax 'Kamermans

7
З того часу, як я опублікував це питання, я зайшов далеко, і ось невеличка порада. Ви можете використовувати npm i <package_name> -Sдля додавання до вашого dependenciesсписку або npm i <package_name> -Dдля додавання до вашого dev-dependencies. Той самий прапор застосовується для вилучення з npm rm <package_name> -Sабоnpm rm <package_name> -D
криком

1
але зауважте, що це просто скорочені еквіваленти прапорів для --save та --save-dev. Перегляньте npm helpвсі прапори та їх скорочені еквіваленти. (все, що встановлено за допомогою -S або --save і буде видалено за допомогою будь-якого, також npm не бачить їх різними. Просто "менше набору тексту" для -S)
Майк 'Помакс' Камерманс

1
Ти - святий серед людей.
Джон фон Нойман,

0

У моєму випадку --save не очистив запис із package.json, команда, запропонована ionic-check, я думаю, якщо видалення відбудеться з будь-якими помилками package.json не буде оновлено, і в цьому випадку у вас є лише опція вручну змінювати package.json, це нудно, але єдиний спосіб, на який я здогадуюсь

ОНОВЛЕННЯ

коли ви видаляєте пакет, який має залежність від іншого активного пакета, то в такому випадку видалення може призвести до помилки з помилками / попередженнями, безпечний метод полягає в наступному графіку залежностей, не впевненому, чи є який-небудь інструмент, зручний інструмент при таких операціях, попередження повідомлення досить оманливі, хоча "ви повинні встановити залежності однолітків .." не має сенсу, коли ми видаляємо пакет


1
Це не повинно бути необхідним: якщо він є у dependenciesсписку, то його uninstall --save слід вилучити, незалежно від того, чи залежить від цього щось інше. NPM використовує досить розумне згладжування залежностей, тому, якщо у вас є X у вашому списку залежностей (явно) і ви видалите X --save, він буде видалений. Однак пам’ятайте, що існує декілька списків залежностей, і --saveце не те саме --save-dev, що --save-prod, або --save-optional. Також так: якщо ваші uninstallпричини призводять до помилок, NPM зупиняється на цій помилці. Він не намагається продовжувати, оскільки більше не може гарантувати правильність.
Майк 'Помакс' Камерманс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.