我从另一个项目中复制了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 outdated

要只更新一个依赖项,只需使用以下命令:

npm install yourPackage@latest

例如:

我的package.json文件具有依赖关系:

"@progress/kendo-angular-dateinputs": "^1.3.1",

那么我应该写:

npm install @progress/kendo-angular-dateinputs@latest

save dev是什么意思?

npm install @progress/kendo-angular-dateinputs@latest --save-dev

正如npm安装文档所说:

-D、 --save dev:Package将显示在devDependencies中。

其他回答

要将一个依赖项更新到最新版本,而不必手动打开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并升级你的包。我认为这样更好,因为如果你需要一些特殊的东西,比如保持一个库的当前版本,你可以编辑你的列表。

使用*作为最新版本的版本,包括不稳定版本使用最新版本作为最新稳定版本的版本定义使用LatestStablePackages使用最新的稳定版本号修改package.json

下面是一个示例:

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

在@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”之后将它们连接起来,最终用最新版本安装所有包。此步骤可以使用没有设置版本的包或现有项目更新新项目

在2023年,我简单地使用了:

$npm更新

许多软件包都在此时更新,但您可能会收到一条消息,其中一些需要修复。在这种情况下,我跑了:

$npm审计修复--强制

最后,为了确保它已全部安装,我运行

$npm安装

就是这样,我的包更新了。无需手动编辑配置文件。