How do I update each dependency in package.json to the latest version?
我从另一个项目复制了package.json,现在想将所有的依赖项都放到它们的最新版本中,因为这是一个新项目,如果它坏了,我不介意修复它。
最简单的方法是什么?
我现在知道的最好方法是运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | { "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" } } |
更新5/1/19:6年后,我仍然保持NPM检查更新作为这个问题的全面解决方案。享受!
看起来NPM检查更新是实现这一点的唯一方法。
1 2 3 | npm i -g npm-check-updates ncu -u npm install |
NPM<3.11时:
只需将每个依赖项的版本更改为
之前:
1 2 3 4 5 6 7 8 | "dependencies": { "express":"*", "mongodb":"*", "underscore":"*", "rjs":"*", "jade":"*", "async":"*" } |
号
后:
1 2 3 4 5 6 7 8 | "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" } |
当然,这是更新依赖关系的直击锤。如果如您所说,项目是空的,没有任何东西可以破坏,那就好了。
另一方面,如果您正在一个更成熟的项目中工作,那么您可能希望在升级之前验证您的依赖项中没有破坏性的更改。
要查看哪些模块过时,只需运行
参见https://www.npmjs.org/package/npm-check-updates
1 2 3 | $ npm install -g npm-check-updates $ ncu -u $ npm install |
[编辑]如果您有一个现代化版本的
1 2 | $ npx npm-check-updates -u $ npm install |
。
TLDR;(更新为新的NPM版本)
自从这些答案最初被写出来之后,情况有了一些变化。
NPM 2+:一定要收缩你的部门,否则你可能会以一个死项目结束。前几天我拿出了一个项目,但没有运行,因为我的部门都过时了/更新了/一团糟。如果我收缩包装,新产品经理将完全安装我需要的。
细节对于那些到此为止的好奇者,以下是我的建议:
使用1 2 3 4 5 6 7 8 9 10 11 12 13 | # `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,我收到一些依赖警告)
1 2 | $ rm -rf node_modules $ npm install |
号最后,使用
1 2 | $ rm npm-shrinkwrap.json $ npm shrinkwrap |
现在,
如果您将
这是一种从开发(所有更新,所有时间)过渡到生产(任何人都不碰任何东西)的方法。
NPM过时
NPM检查更新
NPM包覆膜
P.S.Sharn正在将你的包裹列表发送到Facebook。
要将一个依赖项更新到其最新版本,而不必手动打开
1 | npm install {package-name}@* {save flags?} |
。
即
1 | npm install express@* --save |
号
供参考,NPM安装
正如用户vespakoen在拒绝的编辑中所指出的,也可以通过这种方式一次更新多个包:
1 | npm install --save package-nave@* other-package@* whatever-thing@* |
号
他还为基于
附言:我也不喜欢为那样的事情手动编辑
如果您碰巧使用Visual Studio代码作为您的IDE,这是一个有趣的小扩展,使更新
。
自NPM 1.3.15起生效。
1 2 3 | "dependencies": { "foo":"latest" } |
。
下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | "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" }, |
号
我在上面找到的最好答案中唯一需要注意的是,它会将模块更新到最新版本。这意味着它可以更新为不稳定的alpha构建。
我将使用那个NPM检查更新实用程序。我的小组使用了这个工具,它通过安装稳定的更新有效地工作。
如上所述:安装并运行:
1 2 3 | $ npm install -g npm-check-updates $ npm-check-updates -u $ npm install |
号
要查看哪些包具有可用的较新版本,请使用以下命令:
1 | npm outdated |
要只更新一个依赖项,只需使用以下命令:
1 | npm install yourPackage@latest --save |
。
例如:
我的
1 | "@progress/kendo-angular-dateinputs":"^1.3.1", |
。
那么我应该写:
1 | npm install @progress/kendo-angular-dateinputs@latest --save |
我真的很喜欢NPM升级的工作方式。它是一个简单的命令行实用程序,可以遍历所有依赖项,并允许您查看与最新版本相比的当前版本,如果需要,还可以进行更新。
下面是在您的项目根目录中运行
。
对于每个依赖项,您可以选择升级、忽略、查看变更日志或完成该过程。到目前为止,它对我很有用。
编辑:要清除这是一个第三方软件包,在命令生效之前需要安装它。它本身不附带NPM:
1 | npm install -g npm-upgrade |
然后从包含package.json文件的项目根目录开始:
1 | npm-upgrade |
号
这里有一个基本的regex来匹配语义版本号,这样您就可以用星号快速替换它们。
语义版本regex1 | ([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+) |
。如何使用
在JSON文件中选择要替换的包版本。
。
输入上面的regex并验证它是否匹配正确的文本。
氧化镁
用星号替换所有匹配项。
氧化镁
运行
此功能已在
更新EDOCX1[2]
删除
运行
更新到最新版本。你可以和
我最近不得不更新几个使用npm和package.json的gruntfile.js magic的项目。下面的bash命令(多行命令)对我很有效:
1 2 3 | npm outdated --json --depth=0 | \ jq --ascii-output --monochrome-output '. | keys | .[]' | \ xargs npm install $1 --save-dev |
这里的想法是:将
以上就是我在机器上运行的原因:节点=v0.11.10 osx=10.9.2 npm=1.3.24
这需要:xargs http://en.wikipedia.org/wiki/xargs(我相信是我的机器的原生)和jq http://stedolan.github.io/jq/(我用
注意:我只使用
然后我用一个简单的
1 | npm outdated --depth=0 |
。
此外,还可以使用
1 | npm list --depth=0 |
如果你想通过一个漂亮的(对于终端)交互式报告界面使用温和的方法,我建议你使用NPM检查。
它不是一个锤子,它给你更多的相关知识和控制,你的依赖更新。
为了让您体验一下这里等待的是什么,这里有一个屏幕截图(从git页面上刮下来进行NPM检查):
氧化镁
UPDTR!
Based on npm outdated, updtr installs the latest version and runs npm test for each dependency. If the test succeeds, updtr saves the new version number to your package.json. If the test fails, however, updtr rolls back its changes.
号
https://github.com/peerigon/updtr
我用
1 2 3 | npm i -g npm npm-check npm-check -ug #to update globals npm-check -u #to update locals |
。
另一个有用的命令列表,它将在
1 2 3 4 5 6 | npm cache clean rm -rf node_modules/ npm i -g npm npm-check-updates ncu -g #update globals ncu -ua #update locals npm i |
。
从NPM 5.2.0版开始,有一种方法可以在一行中运行它,而无需向全局NPM注册表或本地安装任何附加包。这可以通过利用与NPM捆绑在一起的新
在项目的根目录中运行以下命令:
1 | npx npm-check-updates -u && npm i |
用于更新
1 2 3 | npm install -g npm-check-updates ncu -a npm install |
背景:
我使用的是@josh3736的最新命令,但我的
The following dependency is satisfied by its declared version range,
but the installed version is behind. You can install the latest
version without modifying your package file by using npm update. If
you want to update the dependency in your package file anyway, run ncu
-a.
号
阅读NPM检查更新的文档,您可以看到不同之处:
https://www.npmjs.com/package/npm-check-updates网站
-u, --upgrade: overwrite package file
-a, --upgradeAll: include even those dependencies whose latest version satisfies the declared semver dependency
号
NCU是
1 | [INFO]: You can also use ncu as an alias |
。
如果您使用的是
更多的理由使用纱线超过
如果使用yarn,以下命令会将所有软件包更新为最新版本:
埃多克斯1〔23〕
从他们的文档中:
The
upgrade --latest command upgrades packages the same as the upgrade command, but ignores the version range specified in package.json. Instead, the version specified by the latest tag will be used (potentially upgrading the packages across major versions).
号
上述命令不安全,因为在切换版本时可能会中断模块。相反,我推荐以下内容
- 使用
npm shrinkwrap 命令将实际的当前节点模块版本设置为package.json。 - 如果每个依赖项未使用https://github.com/bahmutov/next-update命令行工具中断测试,请将其更新为最新版本
1 2 3 | npm install -g next-update // from your package next-update |
号
如果使用NPM 5和节点8,请尝试执行以下命令
NPM更新—保存
无附加包的解决方案
将每个依赖项的版本更改为
1 2 3 4 | "dependencies": { "react":"*", "react-google-maps":"*" } |
然后运行
您的一些软件包已更新,但有些没有更新?
1 2 3 4 | "dependencies": { "react":"^15.0.1", "react-google-maps":"*" } |
。
这是一个棘手的部分,这意味着你的本地版本的"反应"比最新版本低。在这种情况下,NPM下载并更新了"react"包。但是,您的本地版本的"反应谷歌地图"与最新版本相同。
如果仍要"更新"未更改的
例如删除
最后再次运行
1 2 3 4 | "dependencies": { "react":"^15.0.1", "react-google-maps":"^4.10.1" } |
。
如果要更新开发依赖项,请不要忘记运行
我通过查看https://github.com/tjunnone/npm-check-updates的说明解决了这个问题。
1 2 3 4 | $ npm install -g npm-check-updates $ ncu $ ncu -u # to update all the dependencies to latest $ ncu -u"specific module name" #in case you want to update specific dependencies to latest |
号
备选方案是
1 2 3 | "dependencies":{ "foo" :">=1.4.5" } |
。
每次使用NPM更新时,它都会自动更新到最新版本。有关更多版本语法,请访问:https://www.npmjs.org/doc/misc/semver.html
下面的代码(已被接受)给我写了一些类似"太长的废话",什么也没做。可能使用全局标志是问题所在,IDK。
1 2 3 | npm i -g npm-check-updates ncu -u npm install |
。
我决定使用我的文本编辑器,改为使用半手动方法。
我从我的
1 2 3 4 | "browserify":"10.2.6", "expect.js":"^0.3.1", "karma":"^0.13.22", "karma-browserify":"^5.2.0", |
我将搜索模式设置为正则表达式,使用
npm install \1 --save-dev
1 2 3 4 5 6 7 8 | 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并点击enter。一切都升级了,运转良好。这就是全部。
1 2 3 4 | "browserify":"^16.1.0", "expect.js":"^0.3.1", "karma":"^2.0.0", "karma-browserify":"^5.2.0", |
号
我不认为这有什么大不了的,因为你只需要偶尔做一次,但是你可以很容易地编写一个脚本,解析
如果你用的是Github的话。https://greenkeeper.io网站/
它是一个Github集成,并且非常容易设置。安装后,它会自动在指定的存储库中创建拉请求(如果需要的话,也可以创建所有请求),并使代码始终保持最新状态,而不会强制您手动执行任何操作。然后,PRS应该触发一个基于CI服务的构建,并且根据成功或失败的检查,您可以继续确定触发问题的是什么,或者当CI通过时,只需合并PR。
氧化镁氧化镁
在底部,您可以看到第一个构建最初失败了,在提交("升级到节点v6.9")之后,测试通过了,所以我最终可以合并pr。也有很多emoji。
另一种选择是https://dependencyci.com/,但我没有进行深入测试。乍一看,在国际海事组织看来,绿色保持者总体上看起来更好,而且更具融合性。
- NPM过时
- NPM更新
应该为你的应用程序提供最新的兼容版本。但不是最新版本。
我找到了新版本的NPM的另一个解决方案。我要做的是用显式的最新版本号替换所有"*"依赖项。讨论的方法对我来说都不管用。
我所做的:
package.json中的所有内容现在都更新到最新版本。
到目前为止,最简单的方法是使用pnpm而不是npm,然后简单地键入:
埃多克斯1〔2〕
https://github.com/pnpm/pnpm/releases/tag/v3.2.0版
可以使用NPM脚本进行自动更新:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | { "_cmd-update-modules":"npm run devops-update-modules", "scripts": { "create-global-node-modules-folder":"if not exist "%appdata%\ pm\ ode_modules" mkdir %appdata%\ pm\ ode_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\ odejs\ ode_modules\ pm" -y -i lru-cache", "npm-check-u-g":"npm-check "C:\\Program Files\ odejs\ ode_modules\ pm" -y -g -i lru-cache", "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/462347