Вопрос: Как обновить каждую зависимость в package.json до последней версии?


Я скопировал 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"
  }
}

Я теперь являюсь сотрудником по NPM-проверить-обновление , что является отличным решением этой проблемы.


1397


источник


Ответы:


Выглядит как NPM-проверить-обновление это единственный способ сделать это сейчас.

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, В нем будут перечислены все установленные зависимости, которые имеют более новые версии.


1648



npm-check-updatesэто утилита, которая автоматически настраивает package.json с помощью последняя версия всех зависимостей

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

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

858



TLDR; (обновлено для новых версий NPM)

Вещи немного изменились, поскольку эти ответы были изначально написаны.

npm 2+: npm outdated+ npm update+ npm shrinkwrap

Старые npm: npm-check-updatesпакет + npm shrinkwrap

Обязательно обмотайте свои депы, или вы можете закончиться мертвым проектом. На днях я вытащил проект, и это не сработало, потому что мои депо были устаревшими / обновленными / беспорядочными. Если бы я сжался, 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, все установки будут использовать одни и те же версии.

Это способ перехода от разработки (все обновления, все время) к производству (никто ничего не трогает).


286



To update one dependency to its lastest version without having to manually open the package.json and change it, you can run

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

i.e.

npm install express@* --save

For reference, npm-install


As noted by user Vespakoen on a rejected edit, it's also possible to update multiple packages at once this way:

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

He also apports a one-liner for the shell based on npm outdated. See the edit for code and explanation.


PS: I also hate having to manually edit package.json for things like that ;)


151



This works as of npm 1.3.15.

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

47



If you happen to be using Visual Studio Code as your IDE, this is a fun little extension to make updating package.json a one click process.

Version Lense

enter image description here


46



  1. Use * as the version for the latest releases, including unstable
  2. Use latest as version definition for the latest stable version
  3. Modify the package.json with exactly the latest stable version number using LatestStablePackages

Here is an example:

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

37



The only caveat I have found with the best answer above is that it updates the modules to the latest version. This means it could update to an unstable alpha build.

I would use that npm-check-updates utility. My group used this tool and it worked effectively by installing the stable updates.

As Etienne stated above: install and run with this:

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

35



Here is a basic regex to match semantic version numbers so you can quickly replace them all with an asterisk.

Semantic Version Regex

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

How to use

Select the package versions you want to replace in the JSON file.

screenshot:select the text you want to replace

Input the regex above and verify it's matching the correct text.

screenshot:input the semver regex above

Replace all matches with an asterisk.

screenshot:replace package versions with an asterisk

Run npm update --save


22