我从另一个项目中复制了package.json,现在想将所有依赖项都升级到最新版本,因为这是一个新项目,如果出现问题,我不介意修复。

最简单的方法是什么?

我知道的最好的方法是运行npm info express版本,然后手动更新package.json中的每个依赖项。一定有更好的办法。

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "dependencies": {
    "express": "^3.0.3", // how do I get these bumped to latest?
    "mongodb": "^1.2.5",
    "underscore": "^1.4.2"
  }
}

有关纱线特定的解决方案,请参阅本堆栈溢出线程。


当前回答

NPM脚本可以自动更新:

{
    "_cmd-update-modules": "npm run devops-update-modules",
    "scripts": {
        "create-global-node-modules-folder": "if not exist \"%appdata%\\npm\\node_modules\" mkdir %appdata%\\npm\\node_modules",
        "npm-i-g": "npm i npm@latest -g",
        "npm-check-i-g": "npm i npm-check@latest -g",
        "eslint-i-g": "npm i eslint@latest -g",
        "npm-check-u-l": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y",
        "npm-check-u-g": "npm-check \"C:\\Program Files\\nodejs\\node_modules\\npm\" -y -g",
        "npm-deep-update-l": "npm update --depth 9999 --dev",
        "npm-deep-update-g": "npm update --depth 9999 --dev -g",
        "npm-cache-clear": "npm cache clear --force",
        "devops-update-modules": "npm run create-global-node-modules-folder && npm run npm-i-g && npm run npm-check-i-g && npm run eslint-i-g && npm run npm-check-u-l && npm run npm-check-u-g && npm run npm-deep-update-l && npm run npm-deep-update-g && npm run npm-cache-clear"
    }
}

有关详细信息和分步手册:https://stackoverflow.com/a/34295664

其他回答

上述命令不安全,因为在切换版本时可能会损坏模块。相反,我建议如下

使用npm shrinkwrap命令将当前节点模块的实际版本设置为package.json。如果每个依赖项没有破坏您的测试,请使用https://github.com/bahmutov/next-update命令行工具

npm install -g next-update
// from your package
next-update

这会很有帮助npm过时|awk‘{if(NR>1){print$1“@”$4}}‘|xargs npm i

要将一个依赖项更新到最新版本,而不必手动打开package.json并更改它,可以运行

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

i.e.

npm install express@* --save

此流程与工作区兼容,即。

npm --workspace some/package install express@*

作为参考,npm install


注意:某些npm版本可能需要最新标志,即npm安装express@latest


正如用户Vespakoen在被拒绝的编辑中所指出的,也可以通过以下方式一次更新多个包:

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

他还提出了一个基于npm过时的外壳的单线。有关代码和说明,请参见编辑。


PS:我也讨厌为这样的事情手动编辑package.json;)

下面的代码(已被接受)给我写了一些类似“这需要太长时间”之类的话,但什么也没做。可能使用全局标志是问题所在,idk。

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

我决定使用文本编辑器,改用半手动方法。

我从package.json的dev依赖项中复制了一个这样的列表(只是长了很多)到记事本++文本编辑器:

"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

我把它复制回bash并按回车键。一切都升级了,工作正常。这就是全部。

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

我认为这没什么大不了的,因为你只需要偶尔做一次,但是你可以很容易地编写一个脚本,它解析package.json并升级你的包。我认为这样更好,因为如果你需要一些特殊的东西,比如保持一个库的当前版本,你可以编辑你的列表。

为npm v2更新+

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检查更新或npm过时来建议最新版本。

# `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将精确版本保存到npm-shrykwrap.json

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

现在,npm安装将使用npm-shrinkwrap.json中的精确版本

如果将npm-shrinkwrap.json签入git,则所有安装都将使用完全相同的版本。

这是一种从开发(所有更新,所有时间)过渡到生产(无人接触任何东西)的方法。

npm过时npm检查更新npm包络线

p.s.Yarn正在将您的包裹列表发送到Facebook。