npm перевірити та оновити пакет, якщо потрібно


471

Нам потрібно інтегрувати тестового бігуна Karma в TeamCity, і для цього я хотів би дати маленькому сценарію (інше) або іншому сис-інженерам, який би:

  1. підберіть потрібний номер версії з якогось конфігураційного файлу (я думаю, я можу помістити його як коментар прямо у karma.conf.js)

  2. перевірте, чи встановлена ​​версія карма-бігуна встановлена ​​в глобальній репо-npm

  3. якщо його немає, або встановлена ​​версія старша від бажаної: підберіть і встановіть правильну версію

  4. запустіть його: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

Отже, моє справжнє питання: "як можна перевірити сценарій, якщо потрібна версія пакета встановлена?". Чи варто робити чек, чи безпечно просто телефонувати npm -g installщоразу?

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

Відповіді:


609

Щоб перевірити, чи будь-який модуль у проекті "старий":

npm outdated

' застарілий ' перевірятиме кожен модуль, визначений у package.jsonі перевіряє, чи є в реєстрі NPM новіша версія.

Наприклад, скажімо, що xml2js 0.2.6(знаходиться в node_modulesпоточному проекті) застаріла, оскільки існує новіша версія (0.2.7). Ви побачите:

xml2js@0.2.7 node_modules/xml2js current=0.2.6

Щоб оновити всі залежності, якщо ви впевнені, бажано:

npm update

Або оновити єдину залежність, таку як xml2js:

npm update xml2js

6
Будьте обережні, npm updateособливо з npm update -g... це не те, що більшість peaole очікує цього зробити! Дивіться: github.com/npm/npm/issues/6247 та gist.github.com/othiym23/4ac31155da23962afd0e
jbandi

6
@jbandi Станом на npm@2.6.1, npm -g updateзнову безпечно для використання. github.com/npm/npm/issues/6247#issuecomment-92182814
Чак Ле Бутт

7
Зауважте, що оновлення npm не оновлює файл package.json, як зазначено у відповіді від @Erik Olson.
Ехтешам Хасан

5
As of npm@5.0.0, 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html
Сідней

368

npm outdatedвизначить пакети, які слід оновити, і npm update <package name>їх можна використовувати для оновлення кожного пакету. Але до npm@5.0.0 npm update <package name>не оновлюватимуть версії вашого пакета.json, що є проблемою.

Найкращим робочим процесом є:

  1. Визначте застарілі пакети
  2. Оновіть версії свого пакета.json
  3. Запустіть, npm updateщоб встановити останні версії кожного пакета

Ознайомтеся з npm-check-updatesдопомогою цього робочого процесу.

  • Встановіть npm-check-updates
  • Запустити, npm-check-updatesщоб перелічити, які пакунки застаріли (в основному те саме, що і запущені npm outdated)
  • Запустіть, npm-check-updates -uщоб оновити всі версії вашого пакета.json (це чарівний соус)
  • Запустіть, npm updateяк завжди, щоб встановити нові версії ваших пакетів на основі оновленого пакета.json

3
npm outdatedпокаже ВСІ пакети .. навіть усередині інших пакетів .. але ті не оновлюватимуться цією процедурою, тому вони завжди з’являться .. тому просто використовуйте npm-check-updates(як ви насправді рекомендували), який показує лише основні пакети з package.json... це актуально
davidhq

З пряжею це набагато простіше, просто введіть "оновлення пряжі".
Крістофер Грігг

17
Чому я повинен встановити менеджер оновлень, щоб керувати своїм менеджером пакунків? Хіба ми не згодні, це нерозумно? Це повинно бути таким же простим, npm install --all-outdatedале це не так ...
ADJenks

3
Ви завжди можете запустити, npm update --save package_nameщоб зберегти останню зміну в package.json.
trungk18

Еріку, ти можеш люб'язно відповісти на це пов’язане питання ТАК , адже це все ще трохи заплутало мене різницю між обома командами, тобто npm updatevs npm-check-updates?
Жоао Піментел Феррейра

146

Існує також "свіжий" модуль під назвою npm-check:

npm-чек

Перевірте застарілі, неправильні та невикористані залежності.

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

Він також забезпечує зручний інтерактивний спосіб оновлення залежностей.


78

Один простий крок:

$ npm i -g npm-check-updates && ncu -u && npm i

Це все. Всі версії пакета в package.jsonбуде останньою основною версією.

Редагувати:

Що тут відбувається?

  1. Встановлення пакета, який перевіряє оновлення для вас.

  2. Використовуйте цей пакет для оновлення всіх версій пакету у вашому package.json(-u скорочується до --updateAll).

  3. Встановіть усі нові версії пакетів.


3
@imnickvaughn ncuрозшифровується як перевірка вузлів-оновлень і -aє опцією 'upgradeAll'. Знайдіть усі варіанти тут: npmjs.com/package/npm-check-updates
Arian Acosta

А що, якщо я хочу це зробити в одному рядку, не використовуючи іншого пакета, наприклад ncu?
ADJenks

Або без глобальної установки,npx -p npm-check-updates ncu -u
entozoon

68
  • Щоб оновити єдиний локальний пакет:

    1. Спочатку дізнайтеся свої застарілі пакети:

      npm outdated

    2. Потім оновіть пакет або пакети, які потрібно вручну:

      npm update --save package_name

Таким чином не потрібно оновлювати локальний package.json файл.

Зауважте, що це оновить ваш пакет до останньої версії.

  • Якщо ви пишете якусь версію у своєму package.jsonфайлі, виконайте такі дії:

    npm update package_name

    У цьому випадку ви отримаєте лише наступну стабільну версію (розшуку) щодо версії, яку ви написали у своєму package.jsonфайлі.

А npm list (package_name)ви можете дізнатися поточну версію своїх локальних пакетів.


14

Команди NPM для оновлення або виправлення вразливих файлів у деяких файлах маніфесту залежності

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

    npm audit

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

    npm audit fix

  • Якщо це не спрацює, спробуйте

    npm audit fix -f, ця команда майже виправить усі вразливості. Деякі залежності або devDependitions зафіксовані у файлі package-lock.json , тому ми використовуємо -fпрапор, щоб змусити їх оновлювати.

  • Якщо ви не хочете використовувати виправлення примусового аудиту, ви можете вручну виправити свої версії залежностей, змінивши їх у файлі package-lock.json та package.json . Потім бігайте

npm update && npm upgrade



10

Ніяких додаткових пакетів, щоб просто перевірити застарілі та оновити ті, що є, ця команда виконає:

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)


Добрий чоловік, спасибі!
drKreso

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

4

Встановлюючи npm-пакети (як глобально, так і локально), ви можете визначити конкретну версію, використовуючи @versionсинтаксис для визначення версії для встановлення.

Іншими словами, виконувати: npm install -g karma@0.9.2 забезпечить встановлення лише 0.9.2 і не буде перевстановлюватися, якщо воно вже існує.

Як слово поради, я б запропонував уникати глобальних встановлень npm, де тільки можна. Багато людей не розуміють, що якщо залежність визначає бін-файл, він встановлюється в ./node_modules/.bin/. Часто дуже просто користуватися локальною версією встановленого модуля, визначеною у пакеті.json. Насправді, сценарії npm додадуть ./node_modules/.bin на ваш шлях.

Як приклад, ось пакет.json, що під час запуску npm install && npm testвстановлю версію карми, визначену в моєму пакеті.json, і використовувати цю версію карми (встановлену в node_modules / .bin / karma) під час запуску testсценарію:

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

Це надає вам перевагу вашого пакета.json, який визначає версію карми, яку слід використовувати, і не потрібно зберігати цю конфігурацію у вашому вікні CI.


що в testсценарії? Чи можете ви, будь ласка, підкажіть, як ви встановите його зі сценарієм.
iLemming

1
Подивіться на package.json. У властивості "скрипти" ви можете визначити іншу властивість, "тест", значення якої - команда, яку потрібно запустити під час введення npm test. Документи npm тут непогані: npmjs.org/doc/scripts.html
addisonj

4

Станом на npm@5.0.0+ ви можете просто зробити:

npm update <package name>

Це автоматично оновить package.jsonфайл. Нам не потрібно оновлювати останню версію вручну, а потім використовуватиnpm update <package name>

Ви все ще можете отримати стару поведінку, використовуючи

npm update --no-save

( Довідка )


1

Щоб дійсно оновити лише один пакет, встановіть NCU, а потім запустіть його саме для цього пакета. Це зіткнеться до справжнього останнього.

npm install -g npm-check-updates

ncu -f your-intended-package-name -u

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