我从另一个项目中复制了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过时”查找过期的依赖项。使用“npm update”执行安全的依赖关系升级。使用“npm install@latest”升级到包的最新主要版本。

中断更新

使用“npx npm check updates-u”。“npm install”将所有依赖项升级到最新的主要版本。

其他回答

在@kozlovd答案上展开,我构建了一个bash脚本,通过两个步骤更新任何npm脚本:

如果您收到错误,请手动计算npm包的数量。npm列表|wc-l这里用包的数量替换NUM_PKGS,如果在上一个命令中出现“UNMET DEPENDENCY”错误,则将$2替换为$4。

NUM_PKGS=9999; npm list --no-unicode | awk -v NUM_PKGS=$NUM_PKGS '{\
    if (NR>1 && NR <NUM_PKGS) {\
        pver=A[split($2,A,"@")];\
        print substr($2,0,length($2)-length(pver))"latest";\
    }\
}' | xargs -r npm i

说明:命令Nº2首先获取包名,并仅在出现“UNMET DEPENDENCY”错误的情况下对其行进行操作,然后awk迭代每个包名,它获取版本值并用“最新”替换,最后所有替换了版本的包都由xargs收集,xargs在“npm i”之后将它们连接起来,最终用最新版本安装所有包。此步骤可以使用没有设置版本的包或现有项目更新新项目

如果您不想安装全局npm检查更新,您只需运行:

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()))"

npm过时npm更新

应该会为您提供与应用程序兼容的最新版本。但不是最新版本。

如果您碰巧使用Visual Studio代码作为IDE,那么这是一个有趣的小扩展,可以使package.json的更新成为一个一键过程。

注意:更新package.json文件中的包后,运行npm更新以安装新版本。

版本镜头

GitLab报告

向上!

基于npm过时,updtr安装最新版本并为每个依赖项运行npm测试。如果测试成功,updtr会将新的版本号保存到package.json中。但是,如果测试失败,则updtr将回滚其更改。

https://github.com/peerigon/updtr