Як оновити кожну залежність у package.json до останньої версії?


2010

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

Який найпростіший спосіб це зробити?

Найкращий спосіб, який я знаю зараз, - це запустити npm info express versionпотім оновити package.json вручну для кожного з них. Має бути кращий спосіб.

{
  "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"
  }
}

ОНОВЛЕННЯ 5/1/19 : Шість років потому, і я все ще підтримую оновлення npm-check як комплексне рішення цієї проблеми. Насолоджуйтесь!


2
Чудово бачити інший підхід до цієї проблеми. Мені дуже подобається вихід Саліти. Деякі приємні функції, до яких я зараз додаю інструмент, github.com/tjunnone/npm-check-updates, - це збереження семантики версій (наприклад, 1.x або> 2.1.0) та фільтрація за назвою / regex / devDeps-only.
Raine Revere

1
Тут НЕОБХІДНІ бути кращими відповідями. Очевидно, що з роздільною здатністю залежності не завжди можна мати останню версію всього. Максимізація найбільшої кількості останніх версій модулів - це лише якась проблема оптимізації. Але NPM не знає, які модулі ви хочете бути останніми більше, ніж інші. Було б здорово, якби було щось подібне: npm update - найновіший xyz, де xyz - це модулі, якими ви хочете бути якнайшвидшими, а всі інші модулі дотримуватимуться їх останньої сумісної версії.
Олександр Міллс

2
npm буде правильно обробляти конфлікти версій між спільними залежностями, завантажуючи правильну для кожної. Отже, якщо Dep A залежить від Dep C v1.0.0, а Dep B залежить від Dep C v2.0.0, вони будуть встановлені та використані належним чином. Таким чином, ви можете встановити найновіші пакети, які ви хочете.
Raine Revere

Спробуйте це змусити оновити:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey

Я завжди перевіряю цю відповідь. Але я бачу, що вона прослизнула в результатах Google. Сподіваємось, цей коментар допоможе підштовхнути його релевантність !!
Зак Сміт

Відповіді:


2390

Схоже, npm-check-updates - єдиний спосіб зробити це зараз.

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

У npm <3,11:

Просто змініть версію кожної залежності на *, а потім запустіть npm update --save. ( Примітка: зламаний в останніх (3.11) версіях npm ).

Перед:

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

Після:

  "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"
  }

Звичайно, це тупий молоток оновлення залежностей. Добре, якщо - як ви сказали - проект порожній і нічого не може зламатися.

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

Щоб побачити, які модулі застаріли, просто запустіть npm outdated. У ньому буде перераховано всі встановлені залежності, які мають новіші версії.


13
@thefourtheye: Ви, як правило, не повинні залишати * в package.json, оскільки, можливо, ви автоматично встановите нову версію модуля, порушивши зміни, які порушують вашу програму. Оскільки ми --saveтут використовуємо , то *заміна замінюється на поточну версію кожного пакета.
josh3736

50
Я не в змозі змусити це працювати. Чи щось змінилося з npm з моменту опублікування цієї відповіді? Коли я використовую підстановку, а потім npm install --saveмій знак залишається в моєму package.json.
davidtheclark

15
На жаль, updateі для мене це не працює. Я все ще лишаюся з макетів. Чи є якась документація про це, яку ви знаєте, або будь-які інші ресурси, які я можу переглянути?
davidtheclark

120
Трохи старий, але це може допомогти іншим людям: github.com/tjunnone/npm-check-updates | Використовуйте npm install -g npm-check-updatesдля встановлення, а потім npm-check-updatesдля перевірки наявності оновлень ваших залежностей та npm-check-updates -uоновлення версій пакета.json. Тоді це просто, npm installі він завантажить нові версії.
РафаельDDL

5
Можливо, ваша проблема пов'язана з тим, що ви намагаєтесь оновити пакети розробників, ввівши npm update --saveзамість npm update --save-dev.
adriendenat

1035

npm-check-updates це утиліта, яка автоматично налаштовує package.json з останньою версією всіх залежностей

див. https://www.npmjs.org/package/npm-check-updates

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

[EDIT] Трохи менш нав'язливий (уникає глобальної установки) способу зробити це, якщо у вас є сучасна версія npm:

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

135
Це повинно бути доступним у власній формі через саму команду npm, дійсно найкраще рішення дотепер для оновлення залежностей.
Мохаммед Аріф

7
Повинно бути частиною npm споконвічно, повністю погоджуйтеся. Однак це не так, і це рішення приходить як вітер. Дякую.
Стефан

2
я припускаю, що ви, хлопці, штовхаєте [HARD], щоб отримати це в основні npm?
enorl76

3
@Batman Так, якщо ви раніше не встановлювали. В іншому випадку використовуйте оновлення npm. ncu просто оновлює package.json. Він не встановлює та не оновлює 'node_modules'.
Музаффер

1
марний пакет, оновлення лише частини пакунків ncu -a, не оновлення package.json також.
Олександр Кім

385

Оновлено до останнього NPM

npm 2+ (Вузол 0,12+):


npm outdated
npm update
git commit package-lock.json

Стародавні npm (близько 2014 року):

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

Не забудьте скоротити ваші депси, інакше ви можете закінчитись мертвим проектом. Днями я витягнув проект, і він не запустився, оскільки всі мої депа були застаріли / оновлені / безлад. Якби я скоротився, npm встановив би саме те, що мені потрібно.


Деталі

Для допитливих, хто досягла цього, ось що я рекомендую:

Використовуйте npm-check-updatesабо npm outdatedзапропонуйте останні версії.

# `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

Потім зробіть чисту установку (без Rm, я отримав деякі попередження про залежність)

$ rm -rf node_modules
$ npm install 

І, нарешті, зберегти точні версії для npm-shrinkwrap.jsonзnpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

Тепер ми npm installбудемо використовувати точні версії вnpm-shrinkwrap.json

Якщо ви зареєструєтеся npm-shrinkwrap.jsonв git, всі встановлення використовуватимуть однакові версії.

Це спосіб переходу від розвитку (всі оновлення, весь час) до виробництва (ніхто нічого не торкається).

ps Пряжа надсилає ваш список пакетів у Facebook .


13
це фактично правильна відповідь. із встановленими десятками деп, це найкращий спосіб
Angel S. Moreno

6
З досвіду, порада завжди оновлювати всі пакети одразу може бути небезпечною.
альфадог

1
Напевно. Якщо ви створюєте npm-shrinkwrap.jsonджерело в джерело та здійснюєте їх виконання, коли ви оновлюєтесь, ви завжди можете "повернутися туди, де ви були" Коли я почав функцію скорочення, я не помітив.
Майкл Коул

21
це не відповідає на запитання. Питання в тому, як оновити останню версію. npm updateоновлює лише версію semver, не останню.
gman

1
Чи можете ви відповісти, чи є альтернатива yarn upgrade package@version?
Бен Сінклер

201

Для того, щоб оновити одну залежність до його Lastest версії без необхідності вручну відкрити package.jsonі змінити його, ви можете запустити

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

тобто

npm install express@* --save

Для довідки, npm-install


Як зазначає користувач Vespakoen при відхиленій редагуванні, також можливо оновлювати декілька пакетів відразу таким чином:

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

Він також призначає одношарову оболонку на основі npm outdated. Дивіться редагування коду та пояснення.


PS: Я також ненавиджу вручну редагувати package.jsonтакі речі;)


8
Це рішення чудове. Швидкий і простий спосіб явного оновлення одного пакета до останньої версії без встановлення нових модулів. Мені подобаються npm-check-updates, але afaik намагається оновлювати всі пакунки, що не завжди є тим, що ви хочете.
Шев

це не працює для менеnpm install react-native-image-picker@* --save
Гаррі Морено

1
@Chev: ncu може легко націлити один або кілька пакетів на ncu express mocha chai. Ви також можете виключити пакети за допомогою ncu -x mocha. Я погоджуюсь, що вище - це найпростіше рішення, хоча для оновлення одного пакету.
Raine Revere

2
Я просто використав щось подібне, що спрацювало, можливо, з більш пізніх документів ... використовує "останню" замість "*"npm install {package-name}@latest {save flags}
Дрю Томас

1
Велике спасибі, це рішення чудове і саме те, що я шукаю. Це дозволяє оновлювати певний пакет без необхідності оновлювати кожну іншу залежність, що може призвести до непередбачених проблем!
Дані Вехбе

90

Якщо ви використовуєте Visual Studio Code як IDE, це невелике розширення для оновлення package.jsonпроцесу одним кліком.

Версія об'єктива

введіть тут опис зображення


2
Тут є піднесений текст 3 версії: github.com/yavorsky/Bump , хоча трохи повільно.
Олександр Кім

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

2
Зауважте, що вже можна побачити останню версію залежностей від пакета з коротким описом вбудованого коду Visual Studio,
клацнувши

1
Зауважте, що він автоматично не встановлює пакети при натисканні посилання на об'єктив коду! Він просто оновлює текст версії package.json.
РА.

59

Це працює з npm 1.3.15.

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

10
Добре знати. Я здогадуюсь, що це, як правило, погана практика на будь-якому виробничому майданчику, оскільки він автоматично оновлюватиметься до потенційно зворотно несумісних версій. Синтаксис '~ 2' фіксує вас на заданий основний номер версії, який після semver буде сумісним назад.
Raine Revere

1
Ви завжди можете заморозити деп на продажі. Це команда для цього. -2 звучить нормально.
Тобіаш Кудник

5
Мені подобається використовувати це разом із npm shrinkwrapзаморожуванням деп.
daniellmb

Якщо ми це робимо, то як ми можемо знати фактичну версію цього пакета? Скажіть, у мене був записаний запис, "react": "16.9.0"а потім я додав останнє до нього і побіг npm i, після цього як я можу знайти, яка версія реагування зараз є в моєму проекті? так "react":"latest"це , що залишилося в моїй package.json, а не кількість , навіть після того, як я зробивnpm i
theprogrammer

52
  1. Використовуйте * як версію для останніх випусків, включаючи нестабільні
  2. Використовуйте latest як визначення версії для останньої стабільної версії
  3. Змініть package.json, використовуючи саме останній стабільний номер версії, використовуючи LatestStablePackages

Ось приклад:

"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
Це найкраща відповідь.
Пеза

1
це повинна була бути прийнята відповідь
EigenFool

все-таки найбезпечніший підхід. Хороша відповідь.
klewis

43

Єдине застереження, яке я знайшов з найкращою відповіддю вище, - це оновлення модулів до останньої версії. Це означає, що він може оновитись до нестабільної збірки альфа.

Я використовував би цю утиліту npm-check-updates. Моя група використовувала цей інструмент, і він ефективно працював, встановивши стабільні оновлення.

Як зазначено вище, Етьєнн: встановіть і запустіть це:

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

3
rm -rf node_modulesперш ніж npm installпозбутися деяких попереджень про залежність для мене.
Майкл Коул

1
Про всяк випадок, якщо у пакет.json у вас є "*", просто змініть його на "0" або "0.0" або "0.0.0" перед запуском npm-check-updates.
ігорпавлов

Це найпростіший спосіб зробити це. Ні клопоту, ні суєти. Працює як шарм. Усі ваші депси оновлюються та встановлюються належним чином. Thx
Йорако Гонсалес

38

Щоб побачити, які пакети мають новіші версії, скористайтеся такою командою:

npm outdated

щоб оновити лише одну залежність, просто скористайтеся такою командою:

npm install yourPackage@latest --save

Наприклад:

Мій package.jsonфайл має залежність:

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

тоді я повинен написати:

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

Приємно, але схоже, що --save (або --save-dev) не є обов'язковим для оновлення.
Буріх

35

Мені дуже подобається, як працює npm-upgrade . Це проста утиліта командного рядка, яка проходить всі ваші залежності та дозволяє вам бачити поточну версію порівняно з останньою версією та, якщо потрібно, оновити.

Ось скріншот того, що відбувається після запуску npm-upgradeв корені проекту (поруч із package.jsonфайлом):

Приклад оновлення npm

Для кожної залежності можна вибрати оновлення, ігнорування, перегляд журналу змін або завершення процесу. До цього часу це для мене чудово працювало.

EDIT: Щоб зрозуміти, це пакет третіх сторін, який потрібно встановити до того, як команда запрацює. Він не йде з npm сам:

npm install -g npm-upgrade

Потім з кореня проекту, який має файл package.json:

npm-upgrade

З огляду на документи, здається, він був створений лише для роботи з локальними залежностями
manncito

2
так, тільки що згадали інші. Ніякої скарги на відповідь :)
Мартін Шнайдер

2
Хм, npm-upgradeне працював для мене, але npm upgradeзробив і оновив мій файл package.json, який саме те, що я шукав.
Grandizer

Хм, цікаво, помилка була? Ідея використання npm-upgradeполягає в тому, що ви можете точно бачити, що саме модернізується, і вибирати, які саме оновити. npm upgradeможе працювати добре для більшості людей, але іноді потрібно мати трохи більше контролю при модернізації.
manncito

1
Ви також можете використовувати це за допомогою npx: npx npm-upgrade- досить круто! :)
рентген

22

Ось основний регулярний вираз, який відповідає семантичним номерам версій, тому ви можете швидко замінити їх зірочкою.

Семантична версія Regex

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

Як користуватись

Виберіть версії пакету, які ви хочете замінити у файлі JSON.

скріншот: виберіть текст, який потрібно замінити

Введіть регулярний вираз вище і переконайтеся, що він відповідає правильному тексту.

скріншот: введіть вищевказаний півгерой

Замініть всі сірники зірочкою.

скріншот: замініть версії пакета зірочкою

Біжи npm update --save


не, коли в назві пакета є номер. тобто: babel-preset-es2015, babel-preset-етап-0, hex2rgba. Можливо, шукайте цитату / подвійну цитату на початку:('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
rofrol

1
у будь-якому редакторі, що підтримує декілька режимів (ej Sublime Text), ви можете вибрати перший :і натиснути ctrl+dкілька разів, поки ви не вибрали їх усіх, потім перейдіть до номера версії (натисніть стрілку праворуч 2 рази) і натисніть клавішу ctrl, потім напишіть"*"
Іван Кастелланос

15

Нещодавно мені довелося оновити кілька проектів, які використовували npm та package.json для їх магії gruntfile.js. Наступна команда bash (багаторядкова команда) добре працювала для мене:

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

Ідея тут: npm outdatedдля jq
передачі виводу як json, до (jq - інструмент аналізатора / запиту командного рядка json)
(зауважте, що використовується --depthаргумент для npm outdated)
jq зніме висновок лише до найменування пакета верхнього рівня.
нарешті, xargs ставить кожну бібліотеку по одному в npm install LIBRARYNAME --save-devкоманду

Вище сказано, що працювало для мене на машині, що працює: node = v0.11.10 osx = 10.9.2 npm = 1.3.24

для цього потрібно:
xargs http://en.wikipedia.org/wiki/Xargs (я вірю в мою машину, я вважаю)
та
jq http://stedolan.github.io/jq/ (я встановив її за допомогою brew install jq)

Примітка. Оновлені бібліотеки я зберігаю лише до пакета.json всередині ключа json devDependancies, використовуючи--save-dev , що було вимогою моїх проектів, цілком можливо, не ваше.

Згодом я перевіряю, чи все під силу просто

npm outdated --depth=0

Також ви можете перевірити поточні версії встановлених версій бібліотеки за допомогою

npm list --depth=0

Я люблю jq і використовую його майже щодня, але для цього я використовую простий awkнатомість:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Корбані

1
Я використовувавcat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Річард Айотт

15

Якщо ви хочете використовувати щадний підхід через прекрасний (для терміналу) інтерактивний інтерфейс звітності, я б запропонував використовувати npm-check .

Це менше молоточка і дає вам більше послідовних знань та контролю над вашою залежністю.

Щоб відчути, що вас чекає ось скріншот (скреблений зі сторінки git для npm-check):

введіть тут опис зображення


14

Ця функція була введена в Росії npm v5. оновлення до npm за допомогоюnpm install -g npm@latest та

оновити package.json

  1. видалити /node_modulesтаpackage-lock.json (if you have any)

  2. бігати npm update. це оновить залежність package.json до останнього на основі semver .

оновити до останньої версії. ви можете піти зnpm-check-updates


13

Якщо ви використовуєте пряжу, наступна команда оновлює всі пакети до їх останньої версії:

yarn upgrade --latest

З їхніх документів :

Ці upgrade --latestоновлення командних пакетів так само , як команда поновлення, але ігнорують діапазон версій , зазначений в package.json. Натомість використовуватиметься версія, визначена останнім тегом (потенційно оновлення пакетів для основних версій).


1
Не оновлює залежності в package.json- github.com/yarnpkg/yarn/isissue/4390
Вандеш

13

Починаючи з npm версії 5.2.0, існує спосіб запустити це в єдиний рядок, не встановлюючи жодних додаткових пакетів до вашого глобального реєстру npm, а також локально до вашої програми. Це можна зробити, скориставшись новою npxутилітою, що постачається з npm. ( Клацніть тут, щоб дізнатися більше. )

Виконайте таку команду в корені проекту:

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

Я просто спробував це, і це працює ... хіба що мені довелося бігти, npm installщоб фактично завантажити нові залежності. Тож я думаю, що це лише оновлює package.json, якщо я щось не пропускаю
owsega

@owsega, ви абсолютно праві, дякую! Я змінив свою відповідь, щоб вона також працювала npm installпісля того, як залежності було оновлено.
ілякам

13

Я використовую npm-checkдля досягнення цього.

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

введіть тут опис зображення

Ще один корисний список команд, який буде зберігати точні номери версій у 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

Це ncu -uі не ncu -uaв другому останньому рядку. Я не можу редагувати, оскільки одна зміна символів не дозволена. Дуже корисно до речі.
Сохайл Ахмед

10

Updtr!

На основі застарілого npm, updtr встановлює останню версію та запускає npm-тест для кожної залежності. Якщо тест проходить успішно, updtr зберігає номер нової версії у ваш package.json. Якщо тест не вдається, але updtr скасовує його зміни.

https://github.com/peerigon/updtr


9

Команди, які мені довелося використовувати для оновлення package.jsonдля NPM 3.10.10:

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

Фон:

Я використовував останню команду від @ josh3736, але моя package.jsonне оновлювалася. Потім я помітив текст опису під час запуску npm-check-updates -u:

Наступна залежність задоволена заявленим діапазоном версій, але встановлена ​​версія відстає. Ви можете встановити останню версію без зміни файлу пакета, використовуючи оновлення npm. Якщо ви хочете все-таки оновити залежність у файлі вашого пакета, запустіть ncu -a.

Читаючи документацію для npm-check-updates, ви можете побачити різницю:

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

-u, --upgrade: перезапис файлу пакета

-a, --upgradeAll: включають навіть ті залежності, остання версія яких задовольняє заявленій залежності від semver

ncu - псевдонім, npm-check-updatesяк видно з повідомлення під час введення npm-check-updates -u:

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

У npm-check-updates v3 -a- це поведінка за замовчуванням, і перезапис пакета.json залишається виключно для -uпараметра.
Raine Revere

8

Якщо ви використовуєте yarn,yarn upgrade-interactive це дійсно гладкий інструмент, який дозволяє переглядати застарілі залежності, а потім вибирати, які ви хочете оновити.

Більше причин використовувати Пряжу npm. Хе.


Пряжа рухається швидко, вже вдарила 1,0 і користуватися чортвом приємно. Це має бути нова обрана відповідь.
Джош Хабдас

1
Не оновлює залежності в package.json- github.com/yarnpkg/yarn/isissue/4390
Вандеш

5

Вищенаведені команди небезпечні, оскільки ви можете зламати модуль при переключенні версій. Натомість рекомендую наступне

  • Встановіть фактичну поточну версію модулів вузла в package.json за допомогою npm shrinkwrap команди.
  • Оновіть кожну залежність до останньої версії, ЯКЩО НЕ ПОВЕРНУТЬ СВОЇ ТЕСТИ, використовуючи https://github.com/bahmutov/next-update інструмент командного рядка
npm install -g наступне оновлення
// з вашого пакету
наступне оновлення

1
Зміни, які несумісні назад, повинні захищатись від активних проектів. ОП більше стосується запуску нового проекту, де ви хочете розбити речі зараз, а не пізніше, і мати останні версії, над якими можна працювати.
Raine Revere

3

Спробуйте виконати наступну команду, якщо ви використовуєте npm 5 та вузол 8

npm update - зберегти


2
updateКоманда , здається, не врізатися залежності за межі первісного визначення. Якщо package.jsonдекларує "1.2.3"точно, ви не отримаєте 1.2.4. Це може бути добре чи погано :)
Альваро Гонсалес

3

Наступний код (який був прийнятий) написав мені щось на кшталт "це займає занадто довгий бла-бла" і нічого не зробив. Можливо, використання глобального прапора було проблемою, idk.

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

Я вирішив використати свій текстовий редактор і застосувати натомість підручник.

Я скопіював такий список (просто набагато довше) із моїх залежностей від розробника до мого package.jsonтекстового редактора блокнота ++:

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

Я встановив режим пошуку на регулярний вираз, використав ^\s*"([^"]+)".*$шаблон для отримання імені пакета і замінив його npm uninstall \1 --save-dev \nnpm install \1 --save-dev. Натиснувши на "замінити всіх". Вихід був таким:

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

Я скопіював це назад на баш і натиснув Enter. Все було модернізоване і працює нормально. Це все.

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

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


1
З оновленнями npm-check, підвісний термінал є відомою проблемою в Windows. Спробуйте додати --packageFile package.jsonтак, щоб знати не чекати stdin.
Raine Revere

@RaineRevere Дякую!
inf3rno


3

Я знайшов ще одне рішення для останньої версії NPM. Що я хочу зробити, це замінити всі "*" залежності на явний номер останньої версії. Жоден із обговорених методів для мене не працював.

Що я зробив:

  1. Замініть всі "*" на "^ 0.0.0"
  2. Біжи npm-check-updates -u

Все в package.json зараз оновлено до останньої версії.


3

Якщо ви не хочете встановлювати глобальні npm-check-updates, ви можете просто виконати це:

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

Альтернатива є

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

щоразу, коли ви використовуєте npm update, воно автоматично оновлюється до останньої версії. Щоб дізнатися більше про синтаксис версій, ви можете перевірити тут: https://www.npmjs.org/doc/misc/semver.html


Однією з причин версій є запобігання змін, несумісних із новими основними версіями. Я б рекомендував проти цього чи «*» номерів версій. ОП пов'язаний з ослабленням процесу при збереженні контролю над , коли це відбувається.
Raine Revere

2

Рішення без додаткових пакетів

Змініть версію кожної залежності на *:

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

Потім бігайте npm update --save .

Деякі ваші пакунки були оновлені, а деякі ні?

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

Це складна частина, це означає, що ваша локальна версія "реагувати" була нижчою за нову. У цьому випадку npm завантажив і оновив пакет "реагувати". Однак ваша локальна версія "react-google-maps" така ж, як і найновіша.

Якщо ви все ще хочете "оновити" без змін *, вам доведеться видалити ці модулі з node_modulesпапки.

наприклад, видалити node_modules/react-google-maps.

Нарешті біжи ще раз npm update --save.

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

Не забудьте запустити, npm update --save-devякщо ви хочете оновити залежності від розвитку.


1

Greenkey, якщо ви використовуєте Github. https://greenkeeper.io/

Це інтеграція Github і надзвичайно просто налаштувати речі. Під час встановлення він автоматично створює запити на витягування у вказаних вами сховищах (або у всіх, якщо потрібно) і постійно оновлює код, не змушуючи нічого робити вручну. Потім PR повинні викликати побудову сервісу CI, і залежно від успішної чи невдалої перевірки ви можете продовжувати з’ясовувати, що викликає проблему, або коли CI проходить просто об'єднати PR.

зелений піар 1 зелений PR 2

Внизу ви бачите, що перша збірка спочатку не вдалася, а після фіксації ("оновлення до вузла v6.9") тести проходять, щоб я міг, нарешті, об'єднати PR. Поставляється з великою кількістю емоджи теж.

Ще одна альтернатива - https://dependencyci.com/ , однак я її не перевіряв інтенсивно. Після першого погляду "Грінкер" виглядає краще в цілому IMO і має кращу інтеграцію.


1
  • нм застаріла
  • npm оновлення

Потрібно отримати найновіші шукані версії, сумісні для вашого додатка. Але не останні версії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.