Automatycznie usuń zależności z package.json podczas korzystania z dezinstalacji npm


84

Po npm initdodaniu zależności w moim pliku package.json za pomocą tego:

npm install package --save

I powiedz, chcę uninstallpakiet i robię to, robiąc:

npm uninstall package

ale chcę, aby mój plik package.json był również odpowiednio aktualizowany, bez konieczności ręcznego przechodzenia do pliku i usuwania tego wiersza.

Z dokumentacji npm jest napisane:

Jest ściśle addytywny, więc nie usuwa opcji z pliku package.json bez naprawdę dobrego powodu, aby to zrobić.

Tak więc chciałem tylko wiedzieć, czy jest to w ogóle możliwe.


Ponieważ moje zależności są automatycznie dodawane do pliku package.json za każdym razem, gdy instaluję z flagą (--save), zastanawiałem się, czy istnieje sposób na usunięcie zależności z package.json, gdy również odinstaluję pakiet.
krzyk

Odpowiedzi:


150

Użyj tej samej --saveflagi. Jeśli zainstalowałeś zależność z:

$> npm install grunt-cli --save

możesz go odinstalować, po zaktualizowaniu pliku package.json, używając:

$> npm uninstall grunt-cli --save

Flaga „save” mówi npm, aby zaktualizował plik package.json na podstawie wykonanej operacji.


3
Używam npm z ember-cli i musiałem użyć --save-devzamiast --save.
gerry3

4
jeśli zainstalowałeś go z --save-dev, to deinstalacja to także --save-dev, ponieważ --save zapisuje w dependenciessekcji pliku package.json, podczas gdy --save-dev zapisze w devDependenciessekcji
Mike ' Pomax 'Kamermans

7
Zaszedłem daleko od opublikowania tego pytania i oto mała wskazówka. Możesz użyć, npm i <package_name> -Saby dodać do swojej dependencieslisty lub npm i <package_name> -Ddodać do swojej listy dev-dependencies. Ta sama flaga dotyczy usuwania za pomocą npm rm <package_name> -Slubnpm rm <package_name> -D
wrzask

1
ale zauważ, że są to po prostu skrócone odpowiedniki flag dla --save i --save-dev. Zobacz npm helpwszystkie flagi i ich skrócone odpowiedniki. (wszystko, co zostało zainstalowane z opcją -S lub --zapisz i zostanie odinstalowane za pomocą jednego z nich, npm nie widzi ich jako innych. Po prostu „mniej wpisywania” dla -S)
Mike 'Pomax' Kamermans

1
Jesteś świętym wśród ludzi.
John Von Neumann

0

W moim przypadku --save nie wyczyścił wpisu z package.json, polecenie zgodnie z sugestią ionic-check Myślę, że jeśli dezinstalacja zakończy się z błędami package.json nie zostanie zaktualizowany, w takim przypadku masz tylko opcję aby ręcznie zmienić plik package.json, jest to żmudne, ale wydaje mi się jedyny sposób

AKTUALIZACJA

kiedy odinstalowujesz pakiet, który jest zależny od innego pakietu, który jest aktywny, to w którym przypadku odinstalowanie może się nie powieść z błędami / ostrzeżeniami, bezpieczną metodą jest śledzenie wykresu zależności, brak pewności, czy jest dostępne jakieś narzędzie, przydatne narzędzie w takich operacjach, ostrzeżenie komunikaty są dość mylące, chociaż „musisz zainstalować zależności peer ...” nie ma sensu, gdy odinstalowujemy pakiet


1
Nie powinno to być konieczne: jeśli jest na dependenciesliście, uninstall --save należy ją usunąć, niezależnie od tego, czy coś innego od niej zależy. NPM używa dość sprytnego spłaszczania zależności, więc jeśli masz X na liście zależności (jawnie) i odinstalujesz X - zapisz, zostanie on usunięty. Należy jednak pamiętać, że istnieje wiele list z zależnościami i --savenie jest taka sama jak --save-dev, --save-prodalbo --save-optional. Również tak: jeśli uninstallprowadzi to do błędów, NPM zatrzymuje się na tym błędzie. Nie próbuje kontynuować, ponieważ nie może już zagwarantować poprawności.
Mike 'Pomax' Kamermans
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.