Jak zaktualizować każdą zależność w pakiecie.json do najnowszej wersji?


2010

Skopiowałem pakiet.json z innego projektu i teraz chcę podważyć wszystkie zależności do ich najnowszych wersji, ponieważ jest to nowy projekt i nie mam nic przeciwko naprawieniu czegoś, jeśli się zepsuje.

Jak najłatwiej to zrobić?

Najlepszym sposobem, jaki znam teraz, jest npm info express versionręczne uruchomienie, a następnie aktualizacja dla każdego pliku package.json. Musi być lepszy sposób.

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

AKTUALIZACJA 5/1/19 : Sześć lat później i nadal utrzymuję npm-check-updates jako kompleksowe rozwiązanie tego problemu. Cieszyć się!


2
Wspaniale jest zobaczyć inne podejście do tego problemu. Naprawdę podoba mi się twórczość Sality. Niektóre fajne funkcje, do których teraz przyczyniam się, github.com/tjunnone/npm-check-updates, to zachowanie semantyki wersjonowania (jak 1.x lub> 2.1.0) i filtrowanie według nazwy / regex / devDeps-only.
Raine Revere

1
Potrzebne są lepsze odpowiedzi. Oczywiście przy rozwiązywaniu zależności nie zawsze możesz mieć najnowszą wersję wszystkiego. Maksymalizacja jak największej liczby najnowszych wersji modułów jest właśnie takim rodzajem problemu optymalizacji. Ale NPM nie wie, które moduły mają być najnowsze niż inne. Byłoby fajnie, gdyby było coś takiego: aktualizacja npm - najświeższe xyz, gdzie xyz to moduły, które chcesz, aby były tak aktualne, jak to możliwe, a wszystkie pozostałe moduły będą śledzić ich najnowszą kompatybilną wersję.
Alexander Mills,

2
npm będzie poprawnie obsługiwał konflikty wersji między współdzielonymi zależnościami, pobierając poprawną dla każdej z nich. Jeśli więc Dep A zależy od Dep C v1.0.0, a Dep B zależy od Dep C v2.0.0, każdy z nich zostanie odpowiednio zainstalowany i użyty. Dlatego możesz bezpłatnie zainstalować najnowszą wersję dowolnego pakietu.
Raine Revere

Spróbuj tego, aby wymusić aktualizację:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey,

Zawsze sprawdzam tę odpowiedź. Ale widzę, że spadło w wynikach Google. Mam nadzieję, że ten komentarz pomoże zwiększyć jego znaczenie !!
Zach Smith

Odpowiedzi:


2390

Wygląda na to, że npm-check-updates to jedyny sposób, aby tak się stało.

npm i -g npm-check-updates
ncu -u
npm install

Na npm <3.11:

Po prostu zmień wersję każdej zależności na *, a następnie uruchom npm update --save. ( Uwaga: zepsuty w ostatnich (3.11) wersjach npm ).

Przed:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

Po:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

Oczywiście jest to tępy młot aktualizacji zależności. W porządku, jeśli - jak powiedziałeś - projekt jest pusty i nic nie może się zepsuć.

Z drugiej strony, jeśli pracujesz w bardziej dojrzałym projekcie, prawdopodobnie chcesz sprawdzić, czy przed aktualizacją nie ma żadnych przełomowych zmian w zależnościach.

Aby zobaczyć, które moduły są nieaktualne, po prostu uruchom npm outdated. Wyświetli listę wszystkich zainstalowanych zależności, które mają nowsze wersje.


13
@thefourtheye: Zasadniczo nie powinieneś zostawiać * w pakiecie.json, ponieważ możesz skończyć automatycznie instalowaniem nowej wersji modułu z przełomowymi zmianami, które psują Twoją aplikację. Ponieważ --savetutaj korzystamy , *jest on zastępowany bieżącą wersją każdego pakietu.
josh3736

50
Nie jestem w stanie uruchomić tego. Czy coś zmieniło się z npm od czasu opublikowania tej odpowiedzi? Kiedy używam symbolu wieloznacznego, a następnie npm install --savesymbol wieloznaczny zostaje w moim package.json.
davidtheclark

15
Niestety korzystanie z mnie updateteż nie działa. Wciąż pozostały mi symbole wieloznaczne. Czy jest na ten temat jakaś dokumentacja lub inne zasoby, na które mógłbym spojrzeć?
davidtheclark

120
Trochę stary, ale może pomóc innym: github.com/tjunnone/npm-check-updates | Użyj, npm install -g npm-check-updatesaby zainstalować, a następnie npm-check-updatessprawdź, czy twoje zależności mają aktualizacje, i npm-check-updates -uzaktualizuj wersje package.json. To jest po prostu npm installi pobierze nowe wersje.
RaphaelDDL

5
Twój problem prawdopodobnie wynika z faktu, że próbujesz zaktualizować pakiety deweloperskie, pisząc npm update --savezamiast npm update --save-dev.
adriendenat

1035

npm-check-updates to narzędzie, które automatycznie dostosowuje pakiet.json z najnowszą wersją wszystkich zależności

patrz https://www.npmjs.org/package/npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

[EDYCJA] Nieco nachalny (pozwala uniknąć globalnej instalacji) sposób na zrobienie tego, jeśli masz nowoczesną wersję, npmto:

$ npx npm-check-updates -u
$ npm install 

135
Powinno to być dostępne natywnie za pomocą samej komendy npm, co jest najlepszym jak dotąd rozwiązaniem do aktualizacji zależności.
Mohammad Arif

7
Powinieneś być częścią NMP natywnie, w pełni się zgadzam. Jednak tak nie jest, a to rozwiązanie przychodzi jak wiatr. Dziękuję Ci.
Stefan

2
zakładam, że chłopaki pchacie [HARD], aby dostać to do rdzenia npm?
enorl76

3
@ Batman Tak, jeśli nie instalowałeś wcześniej. W przeciwnym razie użyj aktualizacji npm. ncu właśnie aktualizuje pakiet.json. Nie instaluje ani nie aktualizuje „node_modules”.
Muzaffer,

1
bezużyteczny pakiet, aktualizowanie tylko części pakietów za pomocą ncu -a, nie aktualizowanie także pliku package.json
Alexander Kim

385

Zaktualizowano dla najnowszej NPM

npm 2+ (Węzeł 0.12+):


npm outdated
npm update
git commit package-lock.json

Ancient npm (około 2014):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

Pamiętaj, aby zmniejszyć swoje depresje, w przeciwnym razie możesz skończyć z martwym projektem. Wyciągnąłem projekt innego dnia i nie zadziałałby, ponieważ wszyscy moi pracownicy byli nieaktualni / zaktualizowani / bałagan. Gdybym owinął folię, npm zainstalowałby dokładnie to, czego potrzebowałem.


Detale

Dla ciekawskich, którzy dotarli tak daleko, oto co polecam:

Użyj npm-check-updateslub, npm outdatedaby zasugerować najnowsze wersje.

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

Następnie wykonaj czystą instalację (bez RM otrzymałem ostrzeżenia o zależnościach)

$ rm -rf node_modules
$ npm install 

Na koniec zapisz dokładne wersje npm-shrinkwrap.jsonznpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Teraz npm installużyje teraz dokładnych wersji wnpm-shrinkwrap.json

Jeśli zalogujesz się npm-shrinkwrap.jsondo git, wszystkie instalacje będą używać dokładnie tych samych wersji.

Jest to sposób na przejście od rozwoju (wszystkie aktualizacje przez cały czas) do produkcji (nikt niczego nie dotyka).

ps Yarn wysyła listę pakietów na Facebook .


13
to jest prawdziwa poprawna odpowiedź. z zainstalowanymi dziesiątkami deps, jest to zdecydowanie lepszy sposób
Angel S. Moreno

6
Z doświadczenia wynika, że ​​rada, aby zawsze aktualizować wszystkie pakiety naraz, może być niebezpieczna.
alphadogg,

1
Na pewno. Jeśli tworzysz i npm-shrinkwrap.jsondo źródła, i zatwierdzasz przy każdej aktualizacji, zawsze możesz „wrócić do miejsca, w którym byłeś”. Kiedy zaczynałem, przeoczyłem funkcję zawijania.
Michael Cole,

21
to nie odpowiada na pytanie. Pytanie brzmi, jak zaktualizować najnowszą wersję. npm updatetylko aktualizacje do wersji semver, a nie najnowsze.
gman

1
Czy możesz odpowiedzieć, jeśli istnieje alternatywa dla yarn upgrade package@version?
Ben Sinclair,

201

Aby zaktualizować jedną zależność do najnowszej wersji bez konieczności ręcznego otwierania package.jsoni zmiany, możesz uruchomić

npm install {package-name}@* {save flags?}

to znaczy

npm install express@* --save

W celach informacyjnych npm-install


Jak zauważył użytkownik Vespakoen w przypadku odrzuconej edycji, można również zaktualizować wiele pakietów jednocześnie:

npm install --save package-nave@* other-package@* whatever-thing@*

On również umieszcza jeden-liner dla powłoki na podstawie npm outdated. Zobacz edycję kodu i objaśnień.


PS: Nienawidzę też ręcznej edycji package.jsontakich rzeczy;)


8
To rozwiązanie jest świetne. Szybki i łatwy sposób jawnego zaktualizowania jednego pakietu do najnowszej wersji bez instalowania nowych modułów. Lubię npm-check-updates, ale afaik stara się aktualizować wszystkie pakiety, co nie zawsze jest tym, czego chcesz.
Chev

to nie działa dla mnienpm install react-native-image-picker@* --save
Harry Moreno,

1
@Chev: ncu może łatwo celować w jeden lub kilka pakietów ncu express mocha chai. Możesz także wykluczyć pakiety za pomocą ncu -x mocha. Zgadzam się, że powyższe jest najprostszym rozwiązaniem do aktualizacji pojedynczego pakietu.
Raine Revere,

2
Właśnie użyłem czegoś podobnego, co zadziałało, z prawdopodobnie najnowszych dokumentów ... używa „najnowszego” zamiast „*”npm install {package-name}@latest {save flags}
Drew Thomas

1
Wielkie dzięki, to rozwiązanie jest świetne i dokładnie to, czego szukam. Pozwala na aktualizację konkretnego pakietu bez konieczności aktualizacji każdej innej zależności, co może prowadzić do nieprzewidzianych problemów!
Dany Wehbe,

90

Jeśli używasz Visual Studio Code jako IDE, jest to zabawne małe rozszerzenie do aktualizacji package.jsonjednym kliknięciem.

Wersja obiektywu

wprowadź opis zdjęcia tutaj


2
Jest tutaj wysublimowana wersja tekstowa 3: github.com/yavorsky/Bump , choć nieco wolniejsza.
Alexander Kim

4
Działało pięknie, na wypadek, gdyby dla nikogo nie było to jasne, to po prostu sprawdza wersje w pliku package.json w porównaniu z najnowszymi wersjami repozytorium npm i umożliwia kliknięcie wersji w celu zaktualizowania treści tekstowej w pliku package.json. Następnie musisz uruchomić „aktualizację npm”, aby powiedzieć npm, aby zainstalował nowe wersje.
MattG

2
Zauważ, że można już zobaczyć najnowszą wersję zależności pakietu z krótkim opisem we wbudowanym kodzie Visual Studio Code, najeżdżając myszą na pozycję pakietu: Wskazówka dotycząca wersji pakietu
Gürol Canbek

1
Pamiętaj, że nie instaluje automatycznie pakietów po kliknięciu łącza do soczewki kodowej! Po prostu aktualizuje tekst wersji package.json.
RA.

59

Działa to od npm 1.3.15.

"dependencies": {
  "foo": "latest"
}

10
Dobrze wiedzieć. Domyślam się, że na ogół byłaby to zła praktyka w każdej witrynie produkcyjnej, ponieważ automatycznie aktualizuje się do wersji potencjalnie niezgodnych wstecz. Składnia „~ 2” blokuje cię w danym głównym numerze wersji, który po semver będzie kompatybilny wstecz.
Raine Revere

1
Zawsze możesz zamrozić zależnie od prod. Jest na to polecenie. -2 brzmi dobrze.
Tobiasz Cudnik

5
Lubię używać tego wraz z npm shrinkwrapzamrozić deps.
daniellmb,

Jeśli to zrobimy, to skąd wiemy, jaka jest rzeczywista wersja tego pakietu? Powiedzmy, że zadzwoniłem, "react": "16.9.0"a potem dodałem do niego najnowszą npm iwersję i uruchomiłem. Po tym, jak sprawdzić, która wersja reagowania jest teraz w moim projekcie? ponieważ "react":"latest"to co jest pozostawione w moim package.json, a nie liczba nawet po zrobiłemnpm i
theprogrammer

52
  1. Użyj *jako wersji najnowszych wydań, w tym niestabilnych
  2. Użyj latestjako definicji wersji dla najnowszej stabilnej wersji
  3. Zmodyfikuj plik package.json, używając dokładnie najnowszego stabilnego numeru wersji LatestStablePackages

Oto przykład:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

2
To najlepsza odpowiedź.
Peza,

1
taka powinna być zaakceptowana odpowiedź
EigenFool,

wciąż najbezpieczniejsze podejście. Dobra odpowiedź.
klewis

43

Jedynym zastrzeżeniem, które znalazłem z najlepszą odpowiedzią powyżej, jest to, że aktualizuje moduły do ​​najnowszej wersji. Oznacza to, że może zaktualizować się do niestabilnej wersji alfa.

Chciałbym użyć tego narzędzia npm-check-updates. Moja grupa używała tego narzędzia i działało skutecznie, instalując stabilne aktualizacje.

Jak stwierdzono powyżej Etienne: zainstaluj i uruchom z tym:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 

3
rm -rf node_moduleszanim npm installpozbyłem się dla mnie ostrzeżeń o zależnościach.
Michael Cole

1
Na wypadek gdybyś miał „*” w pakiecie.json, po prostu zmień go na „0” lub „0.0” lub „0.0.0” przed uruchomieniem aktualizacji npm-check-updates.
igorpavlov

To najłatwiejszy sposób na zrobienie tego. Bez kłopotów, bez rassle. Działa jak marzenie. Wszystkie twoje działy są aktualizowane i poprawnie instalowane. Dzięki
Yoraco Gonzales

38

Aby zobaczyć, które pakiety mają nowsze wersje, użyj następującego polecenia:

npm outdated

aby zaktualizować tylko jedną zależność, użyj następującego polecenia:

npm install yourPackage@latest --save

Na przykład:

Mój package.jsonplik ma zależność:

"@progress/kendo-angular-dateinputs": "^1.3.1",

wtedy powinienem napisać:

npm install @progress/kendo-angular-dateinputs@latest --save

Fajnie, ale wygląda na to, że --save (lub --save-dev) nie jest obowiązkowe do aktualizacji.
Burrich

35

Naprawdę podoba mi się, jak działa npm-upgrade . Jest to proste narzędzie wiersza poleceń, które przechodzi przez wszystkie twoje zależności i pozwala zobaczyć aktualną wersję w porównaniu do najnowszej wersji i zaktualizować, jeśli chcesz.

Oto zrzut ekranu z tego, co dzieje się po uruchomieniu npm-upgradew katalogu głównym projektu (obok package.jsonpliku):

Przykład aktualizacji npm

Dla każdej zależności możesz wybrać aktualizację, zignorować, wyświetlić dziennik zmian lub zakończyć proces. Do tej pory działało mi świetnie.

EDYCJA: Aby to wyjaśnić, jest to pakiet innej firmy, który musi zostać zainstalowany przed uruchomieniem polecenia. Nie pochodzi z samym npm:

npm install -g npm-upgrade

Następnie z katalogu głównego projektu, który ma plik package.json:

npm-upgrade

Patrząc na dokumenty, wydaje się, że został zbudowany tylko do pracy z lokalnymi zależnościami
manncito

2
tak, właśnie wspomniane innym. Brak skargi na odpowiedź :)
Martin Schneider

2
Hmm, npm-upgradenie działało dla mnie, ale działało npm upgradei zaktualizowało mój plik package.json, który był dokładnie tym, czego szukałem.
Grandizer

Hmm ciekawe, czy wystąpił błąd? Pomysł npm-upgradepolega na tym, aby dokładnie zobaczyć, co jest uaktualniane, i wybrać, które z nich zostaną uaktualnione. npm upgrademoże działać dobrze dla większości ludzi, ale czasami musisz mieć trochę więcej kontroli podczas aktualizacji.
manncito

1
Możesz także użyć tego z npx: npx npm-upgrade- całkiem fajnie! :)
prześwietlenie

22

Oto podstawowe wyrażenie pasujące do semantycznych numerów wersji, dzięki czemu możesz szybko zastąpić je gwiazdką.

Regex Wersja semantyczna

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

Jak używać

Wybierz wersje pakietu, które chcesz zastąpić w pliku JSON.

zrzut ekranu: wybierz tekst, który chcesz zastąpić

Wprowadź wyrażenie regularne powyżej i sprawdź, czy pasuje do poprawnego tekstu.

zrzut ekranu: wprowadź wyrażenie regularne powyżej

Zastąp wszystkie mecze gwiazdką.

zrzut ekranu: zamień wersje pakietu na gwiazdkę

Biegać npm update --save


nie występuje, gdy w nazwie pakietu jest liczba. tj .: babel-preset-es2015, babel-preset-stage-0, hex2rgba. Może poszukaj cytatu / podwójnego cytatu na początku:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
rofrol

1
w dowolnym edytorze obsługującym wiele znaków (ej Sublime Text) możesz wybrać pierwszy :i nacisnąć ctrl+dwiele razy, aż wybierzesz je wszystkie, a następnie przejdź do numeru wersji (naciśnij dwukrotnie strzałkę w prawo) i naciśnij ctrl spację, a następnie napisz"*"
Ivan Castellanos

15

Niedawno musiałem zaktualizować kilka projektów, które wykorzystywały npm i package.json ze względu na swoją magię gruntfile.js. Następujące polecenie bash (polecenie wieloliniowe) działało dobrze dla mnie:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

Pomysł tutaj: npm outdatedaby jq
potokować dane wyjściowe jako json, do (jq jest narzędziem do analizowania składni / zapytania w wierszu poleceń json)
(zauważ użycie --depthargumentu dla npm outdated)
jq usunie dane wyjściowe tylko do nazwy pakietu najwyższego poziomu.
na koniec xargs umieszcza każdą NAZWĘ BIBLIOTEKI pojedynczo w npm install LIBRARYNAME --save-devpoleceniu

To, co zadziałało dla mnie na komputerze uruchomionym: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

wymagało to:
xargs http://en.wikipedia.org/wiki/Xargs (uważam, że natywny dla mojego komputera)
i
jq http://stedolan.github.io/jq/ (zainstalowałem go brew install jq)

Uwaga: zaktualizowane biblioteki zapisuję tylko w pliku package.json w kluczu json devDependancies, używając --save-dev, co było wymogiem moich projektów, całkiem możliwe, nie twoje.

Potem sprawdzam, że wszystko jest sos z prostym

npm outdated --depth=0

Można również sprawdzić bieżące wersje zainstalowanych bibliotek najwyższego poziomu za pomocą

npm list --depth=0

Uwielbiam jq i używam go prawie codziennie, ale w tym celu używam prostego awk:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani

1
Używamcat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte

15

Jeśli chcesz zastosować delikatne podejście za pośrednictwem pięknego (dla terminala) interaktywnego interfejsu raportowania, sugerowałbym użycie npm-check .

To mniej młotek i daje większą wiedzę na temat aktualizacji zależności i kontrolę nad nimi.

Aby dać Ci przedsmak tego, co czeka, oto zrzut ekranu (zeskrobany ze strony git dla npm-check):

wprowadź opis zdjęcia tutaj


14

Ta funkcja została wprowadzona w npm v5. zaktualizuj do npm za pomocą npm install -g npm@latesti

aktualizować package.json

  1. usuń /node_modulesipackage-lock.json (if you have any)

  2. biegnij npm update. spowoduje to zaktualizowanie zależności pakiet.json do najnowszej, opartej na semver .

zaktualizować do najnowszej wersji. możesz iść znpm-check-updates


13

Jeśli używasz przędzy, następujące polecenie aktualizuje wszystkie pakiety do ich najnowszej wersji:

yarn upgrade --latest

Z ich dokumentów :

Te upgrade --latestulepszenia polecenie Pakiety takie same jak polecenia uaktualniania, ale ignoruje gamę wersji podanej w package.json. Zamiast tego zostanie użyta wersja określona przez najnowszy znacznik (potencjalnie aktualizacja pakietów w głównych wersjach).


1
Nie aktualizuje zależności w package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

13

Począwszy od npm wersji 5.2.0, istnieje sposób na uruchomienie tego w jednym wierszu bez instalowania dodatkowych pakietów w globalnym rejestrze npm ani lokalnie w aplikacji. Można to zrobić, wykorzystując nowe npxnarzędzie, które jest dołączone do npm. ( Kliknij tutaj, aby dowiedzieć się więcej. )

Uruchom następujące polecenie w katalogu głównym projektu:

npx npm-check-updates -u && npm i

Właśnie próbowałem tego i działa ... z wyjątkiem tego, że musiałem pobiec, npm installaby pobrać nowe zależności. Myślę, że to po prostu aktualizuje pakiet.json, chyba że coś mi brakuje
owsega

@ owsega, masz absolutną rację, dzięki! Zmodyfikowałem moją odpowiedź, aby działała również npm installpo zaktualizowaniu zależności.
ilyakam

13

Używam tego, npm-checkaby to osiągnąć.

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

wprowadź opis zdjęcia tutaj

Kolejna przydatna lista poleceń, która zachowa dokładne numery wersji package.json

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i

To ncu -unie ncu -uajest drugi wiersz. Nie mogę edytować, ponieważ zmiana jednej postaci jest niedozwolona. Nawiasem mówiąc, bardzo pomocny.
Sohail Ahmed

10

Updtr!

W oparciu o nieaktualne npm, updtr instaluje najnowszą wersję i uruchamia test npm dla każdej zależności. Jeśli test się powiedzie, updtr zapisuje nowy numer wersji w pliku package.json. Jeśli test się nie powiedzie, updtr cofa swoje zmiany.

https://github.com/peerigon/updtr


9

Polecenia, które musiałem użyć do aktualizacji package.jsondla NPM 3.10.10:

npm install -g npm-check-updates
ncu -a
npm install

Tło:

Używałem najnowszego polecenia z @ josh3736, ale moje package.jsonnie zostało zaktualizowane. Następnie zauważyłem tekst opisu podczas uruchamiania npm-check-updates -u:

Deklarowany zakres wersji spełnia następującą zależność, ale wersja zainstalowana jest opóźniona. Możesz zainstalować najnowszą wersję bez modyfikowania pliku pakietu za pomocą aktualizacji npm. Jeśli mimo to chcesz zaktualizować zależność w pliku pakietu, uruchom ncu -a.

Czytając dokumentację aktualizacji npm-check-updates widać różnicę:

https://www.npmjs.com/package/npm-check-updates

-u, --upgrade: zastąp plik pakietu

-a, --upgradeAll: obejmuje nawet te zależności, których najnowsza wersja spełnia zadeklarowaną zależność semver

ncu to pseudonim npm-check-updateswidoczny w komunikacie podczas pisania npm-check-updates -u:

[INFO]: You can also use ncu as an alias

W npm-check-updates v3 -ajest zachowaniem domyślnym, a nadpisanie package.json pozostawia się wyłącznie -uopcji.
Raine Revere

8

Jeśli używasz yarn, yarn upgrade-interactivejest naprawdę eleganckim narzędziem, które pozwala wyświetlić nieaktualne zależności, a następnie wybrać, które chcesz zaktualizować.

Więcej powodów, by użyć Przędzy npm. Heh


Przędza porusza się szybko, uderzyła już w 1.0 i jest cholernie przyjemna w użyciu. To powinna być nowa wybrana odpowiedź.
Josh Habdas,

1
Nie aktualizuje zależności w package.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

5

Powyższe polecenia są niebezpieczne, ponieważ możesz zmienić moduł podczas zmiany wersji. Zamiast tego polecam następujące

  • Ustaw aktualną wersję modułów węzła w package.json za pomocą npm shrinkwrapkomendy.
  • Zaktualizuj każdą zależność do najnowszej wersji, JEŚLI NIE PRZERWA TESTÓW, używając narzędzia wiersza polecenia https://github.com/bahmutov/next-update
npm zainstaluj -g następna aktualizacja
// z twojego pakietu
następna aktualizacja

1
Przed aktywnymi projektami należy chronić przed niezgodnymi wstecznymi zmianami. OP jest bardziej zaangażowany w rozpoczęcie nowego projektu, w którym chcesz teraz wszystko załamać, a nie później i mieć najnowsze wersje do pracy.
Raine Revere,

3

Spróbuj wykonać następujące polecenie, jeśli używasz npm 5 i węzła 8

aktualizacja npm - zapisz


2
Wydaje się, że updatepolecenie nie powoduje zderzenia zależności wykraczających poza pierwotną definicję. Jeśli package.jsondeklaruje "1.2.3"dokładnie, nie dostaniesz 1.2.4. To może być dobre lub złe :)
Álvaro González

3

Poniższy kod (który został zaakceptowany) napisał mi coś w stylu „to trwa zbyt długo bla-bla” i nic nie zrobił. Prawdopodobnie problemem była flaga globalna, idk.

npm i -g npm-check-updates
ncu -u
npm install

Postanowiłem skorzystać z mojego edytora tekstu i zastosować podejście półautomatyczne.

Skopiowałem taką listę (tylko o wiele dłużej) z zależności moich package.jsondeweloperów do edytora tekstu notatnika ++:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

Ustawiłem tryb wyszukiwania na wyrażenie regularne, użyłem ^\s*"([^"]+)".*$wzorca, aby uzyskać nazwę pakietu i zastąpiłem go npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Kliknij „zamień wszystko”. Pytanie było następujące:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

Skopiowałem go z powrotem do basha i wcisnąłem Enter. Wszystko zostało zaktualizowane i działa dobrze. To wszystko.

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

Nie sądzę, żeby to była wielka sprawa, ponieważ musisz to robić tylko od czasu do czasu, ale możesz łatwo napisać skrypt, który analizuje package.jsoni aktualizuje twoje pakiety. Myślę, że tak jest lepiej, ponieważ możesz edytować swoją listę, jeśli potrzebujesz czegoś specjalnego, na przykład zachowując aktualną wersję biblioteki.


1
W przypadku aktualizacji npm-check-terminal wiszący terminal jest znanym problemem w systemie Windows. Spróbuj dodać, --packageFile package.jsonaby nie czekać na standardowe wejście.
Raine Revere

@RaineRevere Thanks!
inf3rno


3

Znalazłem inne rozwiązanie dla najnowszej wersji NPM. Chcę zastąpić wszystkie zależności „*” jawnym ostatnim numerem wersji. Żadna z omawianych metod nie zadziałała dla mnie.

Co ja zrobiłem:

  1. Zamień wszystkie „*” na „^ 0.0.0”
  2. Biegać npm-check-updates -u

Wszystko w pakiecie.json jest teraz aktualizowane do ostatniej wersji.


3

Jeśli nie chcesz instalować globalnych aktualizacji sprawdzania npm , możesz po prostu uruchomić:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"

2

Alternatywą jest

"dependencies":{
    "foo" : ">=1.4.5"
}

za każdym razem, gdy korzystasz z aktualizacji npm, automatycznie aktualizuje się do najnowszej wersji. Więcej składni wersji można sprawdzić tutaj: https://www.npmjs.org/doc/misc/semver.html


Jednym z powodów wersjonowania jest zapobieganie zmianom niezgodnym wstecz z nowszymi głównymi wersjami. Odradzałbym to lub numery wersji „*”. OP jest związany z ułatwiając proces utrzymując kontrolę , gdy występuje.
Raine Revere

2

Rozwiązanie bez dodatkowych pakietów

Zmień wersję każdej zależności na *:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

Potem biegnij npm update --save.

Niektóre z twoich pakietów zostały zaktualizowane, ale niektóre nie?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

To trudna część, oznacza to, że Twoja lokalna wersja „Reaguj” była niższa niż najnowsza. W tym przypadku npm pobrał i zaktualizował pakiet „zareaguj”. Jednak Twoja lokalna wersja „reaguj na google-mapy” jest taka sama jak najnowsza.

Jeśli nadal chcesz „aktualizować” bez zmian *, musisz usunąć te moduły z node_modulesfolderu.

np node_modules/react-google-maps. usuń .

W końcu uruchom ponownie npm update --save.

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

Nie zapomnij uruchomić, npm update --save-devjeśli chcesz zaktualizować zależności programistyczne.


1

Greenkeeper, jeśli używasz Github. https://greenkeeper.io/

Jest to integracja z Github i niezwykle łatwa w konfiguracji. Po zainstalowaniu automatycznie tworzy żądania ściągania w określonych przez Ciebie repozytoriach (lub wszystkich, jeśli chcesz) i zawsze aktualizuje kod, bez konieczności ręcznego wykonywania czegokolwiek. PR powinny następnie uruchomić kompilację w usłudze CI, a w zależności od pomyślnego lub nieudanego sprawdzenia możesz nadal zastanawiać się, co powoduje problem lub kiedy CI przejdzie, po prostu połącz PR.

zieleniak PR 1 zieleniak PR 2

Na dole widać, że pierwsza kompilacja nie powiodła się na początku, a po zatwierdzeniu („aktualizacja do węzła v6.9”) testy przebiegły pomyślnie, więc mogłem w końcu scalić PR. Zawiera również wiele emotikonów.

Inną alternatywą byłoby https://dependencyci.com/ , jednak nie testowałem tego intensywnie. Po pierwszym spojrzeniu Greenkeeper wygląda ogólnie lepiej w IMO i ma lepszą integrację.


1
  • npm nieaktualne
  • aktualizacja npm

Powinny uzyskać najnowsze poszukiwane wersje kompatybilne z Twoją aplikacją. Ale nie najnowsze wersje.

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.