我从另一个项目中复制了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"
}
}
有关纱线特定的解决方案,请参阅本堆栈溢出线程。
如果您正在使用Github,请使用Greenkeeper。https://greenkeeper.io/
这是一个Github集成,非常容易设置。安装后,它会自动在您指定的存储库中创建拉取请求(如果需要,也可以全部创建),并使您的代码始终保持最新,而无需强制您手动执行任何操作。然后,PR应该在CI服务上触发构建,根据成功或失败的检查,您可以继续找出触发问题的原因,或者CI通过时,只需合并PR。
在底部,您可以看到第一个构建最初失败,在提交(“升级到节点v6.9”)后测试通过,因此我可以最终合并PR。还附带了很多表情符号。
另一种选择是https://dependencyci.com/然而,我没有集中测试它。乍一看,Greenkeeper在一般IMO中看起来更好,并具有更好的整合性。
下面的代码(已被接受)给我写了一些类似“这需要太长时间”之类的话,但什么也没做。可能使用全局标志是问题所在,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。
我觉得90%的答案都是“使用npm检查更新”的变体。以下是我所做的(相关代码):
{
"devDependencies": {
"updates": "^13.0.5" // the version here could be "latest" or "*" tbh...
},
"scripts": {
"test:dependencies": "updates --update ./",
}
}
运行npm运行测试:dependencies(或调用依赖项更新脚本)将检查package.json中列出的每个包的最新版本,并让您知道最新版本的发布时间。在那之后运行npm i,您将获得最新信息!
此外,与npm检查更新不同,更新具有零依赖性(在本文发布时,ncu有29个)。
npm check updates是一个实用程序,它使用所有依赖项的最新版本
看见https://www.npmjs.org/package/npm-check-updates
$ npm install -g npm-check-updates
$ ncu -u
$ npm install
[编辑]如果你有一个现代版本的npm,一种稍微不那么侵入性(避免全局安装)的方法是:
$ npx npm-check-updates -u
$ npm install