Як оновити кожну залежність у 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.