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 version
rę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ę!
npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
Odpowiedzi:
Wygląda na to, że npm-check-updates to jedyny sposób, aby tak się stało.
Na npm <3.11:
Po prostu zmień wersję każdej zależności na
*
, a następnie uruchomnpm update --save
. ( Uwaga: zepsuty w ostatnich (3.11) wersjach npm ).Przed:
Po:
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.źródło
*
w pakiecie.json, ponieważ możesz skończyć automatycznie instalowaniem nowej wersji modułu z przełomowymi zmianami, które psują Twoją aplikację. Ponieważ--save
tutaj korzystamy ,*
jest on zastępowany bieżącą wersją każdego pakietu.npm install --save
symbol wieloznaczny zostaje w moimpackage.json
.update
też 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ć?npm install -g npm-check-updates
aby zainstalować, a następnienpm-check-updates
sprawdź, czy twoje zależności mają aktualizacje, inpm-check-updates -u
zaktualizuj wersje package.json. To jest po prostunpm install
i pobierze nowe wersje.npm update --save
zamiastnpm update --save-dev
.npm-check-updates
to narzędzie, które automatycznie dostosowuje pakiet.json z najnowszą wersją wszystkich zależnościpatrz https://www.npmjs.org/package/npm-check-updates
[EDYCJA] Nieco nachalny (pozwala uniknąć globalnej instalacji) sposób na zrobienie tego, jeśli masz nowoczesną wersję,
npm
to:źródło
ncu -a
, nie aktualizowanie także pliku package.jsonZaktualizowano dla najnowszej NPM
npm 2+ (Węzeł 0.12+):
Ancient npm (około 2014):
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-updates
lub,npm outdated
aby zasugerować najnowsze wersje.Następnie wykonaj czystą instalację (bez RM otrzymałem ostrzeżenia o zależnościach)
Na koniec zapisz dokładne wersje
npm-shrinkwrap.json
znpm shrinkwrap
Teraz
npm install
użyje teraz dokładnych wersji wnpm-shrinkwrap.json
Jeśli zalogujesz się
npm-shrinkwrap.json
do 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).
npm nieaktualne
npm-check-updates
npm folia termokurczliwa
ps Yarn wysyła listę pakietów na Facebook .
źródło
npm-shrinkwrap.json
do ź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.npm update
tylko aktualizacje do wersji semver, a nie najnowsze.yarn upgrade package@version
?Aby zaktualizować jedną zależność do najnowszej wersji bez konieczności ręcznego otwierania
package.json
i zmiany, możesz uruchomićto znaczy
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:
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.json
takich rzeczy;)źródło
npm install react-native-image-picker@* --save
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.npm install {package-name}@latest {save flags}
Jeśli używasz Visual Studio Code jako IDE, jest to zabawne małe rozszerzenie do aktualizacji
package.json
jednym kliknięciem.Wersja obiektywu
źródło
Działa to od npm 1.3.15.
źródło
npm shrinkwrap
zamrozić deps."react": "16.9.0"
a potem dodałem do niego najnowsząnpm i
wersję 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
*
jako wersji najnowszych wydań, w tym niestabilnychlatest
jako definicji wersji dla najnowszej stabilnej wersjiLatestStablePackages
Oto przykład:
źródło
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:
źródło
rm -rf node_modules
zanimnpm install
pozbyłem się dla mnie ostrzeżeń o zależnościach.Aby zobaczyć, które pakiety mają nowsze wersje, użyj następującego polecenia:
aby zaktualizować tylko jedną zależność, użyj następującego polecenia:
Na przykład:
Mój
package.json
plik ma zależność:wtedy powinienem napisać:
źródło
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-upgrade
w katalogu głównym projektu (obokpackage.json
pliku):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:
Następnie z katalogu głównego projektu, który ma plik package.json:
źródło
npm-upgrade
nie działało dla mnie, ale działałonpm upgrade
i zaktualizowało mój plik package.json, który był dokładnie tym, czego szukałem.npm-upgrade
polega na tym, aby dokładnie zobaczyć, co jest uaktualniane, i wybrać, które z nich zostaną uaktualnione.npm upgrade
może działać dobrze dla większości ludzi, ale czasami musisz mieć trochę więcej kontroli podczas aktualizacji.npx npm-upgrade
- całkiem fajnie! :)Oto podstawowe wyrażenie pasujące do semantycznych numerów wersji, dzięki czemu możesz szybko zastąpić je gwiazdką.
Regex Wersja semantyczna
Jak używać
Wybierz wersje pakietu, które chcesz zastąpić w pliku JSON.
Wprowadź wyrażenie regularne powyżej i sprawdź, czy pasuje do poprawnego tekstu.
Zastąp wszystkie mecze gwiazdką.
Biegać
npm update --save
źródło
('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
:
i nacisnąćctrl+d
wiele 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"*"
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:
Pomysł tutaj:
npm outdated
abyjq
potokować dane wyjściowe jako json, do (jq jest narzędziem do analizowania składni / zapytania w wierszu poleceń json)
(zauważ użycie
--depth
argumentu dlanpm 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-dev
poleceniuTo, 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
Można również sprawdzić bieżące wersje zainstalowanych bibliotek najwyższego poziomu za pomocą
źródło
awk
:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
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):
źródło
Ta funkcja została wprowadzona w
npm v5
. zaktualizuj do npm za pomocąnpm install -g npm@latest
iaktualizować
package.json
usuń
/node_modules
ipackage-lock.json (if you have any)
biegnij
npm update
. spowoduje to zaktualizowanie zależności pakiet.json do najnowszej, opartej na semver .zaktualizować do najnowszej wersji. możesz iść z
npm-check-updates
źródło
Jeśli używasz przędzy, następujące polecenie aktualizuje wszystkie pakiety do ich najnowszej wersji:
yarn upgrade --latest
Z ich dokumentów :
źródło
package.json
- github.com/yarnpkg/yarn/issues/4390Począ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
npx
narzę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:
źródło
npm install
aby pobrać nowe zależności. Myślę, że to po prostu aktualizuje pakiet.json, chyba że coś mi brakujenpm install
po zaktualizowaniu zależności.Używam tego,
npm-check
aby to osiągnąć.Kolejna przydatna lista poleceń, która zachowa dokładne numery wersji
package.json
źródło
ncu -u
niencu -ua
jest drugi wiersz. Nie mogę edytować, ponieważ zmiana jednej postaci jest niedozwolona. Nawiasem mówiąc, bardzo pomocny.Updtr!
https://github.com/peerigon/updtr
źródło
Polecenia, które musiałem użyć do aktualizacji
package.json
dlaNPM 3.10.10
:Tło:
Używałem najnowszego polecenia z @ josh3736, ale moje
package.json
nie zostało zaktualizowane. Następnie zauważyłem tekst opisu podczas uruchamianianpm-check-updates -u
:Czytając dokumentację aktualizacji npm-check-updates widać różnicę:
https://www.npmjs.com/package/npm-check-updates
ncu to pseudonim
npm-check-updates
widoczny w komunikacie podczas pisanianpm-check-updates -u
:źródło
-a
jest zachowaniem domyślnym, a nadpisanie package.json pozostawia się wyłącznie-u
opcji.Jeśli używasz
yarn
,yarn upgrade-interactive
jest 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źródło
package.json
- github.com/yarnpkg/yarn/issues/4390Powyższe polecenia są niebezpieczne, ponieważ możesz zmienić moduł podczas zmiany wersji. Zamiast tego polecam następujące
npm shrinkwrap
komendy.źródło
Spróbuj wykonać następujące polecenie, jeśli używasz npm 5 i węzła 8
aktualizacja npm - zapisz
źródło
update
polecenie nie powoduje zderzenia zależności wykraczających poza pierwotną definicję. Jeślipackage.json
deklaruje"1.2.3"
dokładnie, nie dostaniesz1.2.4
. To może być dobre lub złe :)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.
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.json
deweloperów do edytora tekstu notatnika ++:Ustawiłem tryb wyszukiwania na wyrażenie regularne, użyłem
^\s*"([^"]+)".*$
wzorca, aby uzyskać nazwę pakietu i zastąpiłem gonpm uninstall \1 --save-dev \nnpm install \1 --save-dev
. Kliknij „zamień wszystko”. Pytanie było następujące:Skopiowałem go z powrotem do basha i wcisnąłem Enter. Wszystko zostało zaktualizowane i działa dobrze. To wszystko.
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.json
i 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.źródło
--packageFile package.json
aby nie czekać na standardowe wejście.Rozwiązałem ten problem, widząc instrukcje z https://github.com/tjunnone/npm-check-updates
źródło
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:
npm-check-updates -u
Wszystko w pakiecie.json jest teraz aktualizowane do ostatniej wersji.
źródło
Jeśli nie chcesz instalować globalnych aktualizacji sprawdzania npm , możesz po prostu uruchomić:
źródło
Alternatywą jest
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
źródło
Rozwiązanie bez dodatkowych pakietów
Zmień wersję każdej zależności na
*
:Potem biegnij
npm update --save
.Niektóre z twoich pakietów zostały zaktualizowane, ale niektóre nie?
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 znode_modules
folderu.np
node_modules/react-google-maps
. usuń .W końcu uruchom ponownie
npm update --save
.Nie zapomnij uruchomić,
npm update --save-dev
jeśli chcesz zaktualizować zależności programistyczne.źródło
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.
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ę.
źródło
Powinny uzyskać najnowsze poszukiwane wersje kompatybilne z Twoją aplikacją. Ale nie najnowsze wersje.
źródło