我从另一个项目中复制了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 3.10.10的package.json的命令:
npm install -g npm-check-updates
ncu -a
npm install
背景:
我使用的是@josh3736的最新命令,但我的package.json没有更新。然后,在运行npm检查更新-u时,我注意到了描述文本:
以下依赖性通过其声明的版本范围来满足,但安装的版本落后。您可以安装最新的版本,而无需使用npm更新来修改包文件。如果如果仍要更新包文件中的依赖项,请运行ncu-a。
阅读npm检查更新的文档,您可以看到不同之处:
https://www.npmjs.com/package/npm-check-updates
-u、 --升级:覆盖包文件-a、 --upgradeAll:甚至包括最新版本满足声明的semver依赖项的依赖项
ncu是npm check updates的别名,如键入npm check update-u时的消息所示:
[INFO]: You can also use ncu as an alias
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
我觉得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个)。
下面的代码(已被接受)给我写了一些类似“这需要太长时间”之类的话,但什么也没做。可能使用全局标志是问题所在,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并升级你的包。我认为这样更好,因为如果你需要一些特殊的东西,比如保持一个库的当前版本,你可以编辑你的列表。