我从另一个项目中复制了package.json,现在想要将所有依赖项都添加到它们的最新版本,因为这是一个新项目,如果它破坏了我不介意修复它。
最简单的方法是什么?
我现在知道的最好的方法是运行npm info express version
然后手动更新每个的package.json。肯定有更好的办法。
{
"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:六年后,我仍然保持npm-check-updates作为这个问题的综合解决方案。请享用!
看起来像npm-check-updates是现在实现这一目标的唯一方法。
npm i -g npm-check-updates
ncu -u
npm install
在npm <3.11:
只需将每个依赖项的版本更改为*
,然后运行npm update --save
。 (注:broken in recent (3.11) versions of npm)。
之前:
"dependencies": {
"express": "*",
"mongodb": "*",
"underscore": "*",
"rjs": "*",
"jade": "*",
"async": "*"
}
后:
"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"
}
当然,这是更新依赖关系的直言不讳。如果 - 正如你所说的那样 - 项目是空的,没有任何东西可以打破,这很好。
另一方面,如果您正在一个更成熟的项目中工作,您可能希望在升级之前验证依赖项中是否存在重大更改。
要查看哪些模块已过时,只需运行npm outdated
。它将列出任何已安装的具有较新版本的依赖项。
我真的很喜欢npm-upgrade的工作原理。它是一个简单的命令行实用程序,它遍历所有依赖项,并允许您查看当前版本与最新版本的比较,并根据需要进行更新。
以下是在项目根目录(npm-upgrade
文件旁边)中运行package.json
后发生的情况的屏幕截图:
对于每个依赖项,您可以选择升级,忽略,查看更改日志或完成该过程。到目前为止,它对我来说非常有用。
编辑:要清楚这是一个需要在命令工作之前安装的第三方软件包。 npm本身没有:
npm install -g npm-upgrade
然后从具有package.json文件的项目的根目录:
npm-upgrade
此功能已在npm v5
中引入。使用npm install -g npm@latest
和更新到npm
更新package.json
/node_modules
和package-lock.json (if you have any)
npm update
。这将基于semver将依赖包package.json更新为最新版本。更新到最新版本。你可以去npm-check-updates
我最近不得不更新几个使用npm和package.json作为gruntfile.js魔法的项目。以下bash命令(多行命令)对我来说效果很好:
npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev
这里的想法:将npm outdated
输出作为json传输到jq
(jq是一个json命令行解析器/查询工具)
(注意--depth
使用npm outdated
论证)
jq将仅将输出剥离到顶级包名称。
最后,xargs将每个LIBRARYNAME一次放入npm install LIBRARYNAME --save-dev
命令
以上是在机器运行中对我有用的东西:node = v0.11.10 osx = 10.9.2 npm = 1.3.24
这要求:
xargs http://en.wikipedia.org/wiki/Xargs(我相信我的机器原生)
和
jq http://stedolan.github.io/jq/(我用brew install jq
安装了它)
注意:我只使用devDependancies
将更新的库保存到json密钥--save-dev
内的package.json中,这是我的项目的要求,很可能不是你的。
之后,我检查一切都很简单
npm outdated --depth=0
此外,您可以使用以下方法检查当前的顶级已安装库版本
npm list --depth=0
如果你想通过一个漂亮的(终端)交互式报告界面使用温和的方法,我建议使用npm-check。
它不是锤子,而是为您提供更多依赖性更新的相关知识和控制权。
为了让您体验一下这里的等待截图(从npm-check的git页面中删除):
Updtr!
基于npm过时,updtr安装最新版本并为每个依赖项运行npm test。如果测试成功,则updtr将新版本号保存到package.json。但是,如果测试失败,则updtr会回滚其更改。
我必须用来为package.json
更新NPM 3.10.10
的命令:
npm install -g npm-check-updates
ncu -a
npm install
背景:
我正在使用来自@ josh3736的最新命令,但我的package.json
没有更新。然后我在运行npm-check-updates -u
时注意到了描述文本:
声明的版本范围满足以下依赖关系,但安装的版本落后。您可以使用npm update在不修改软件包文件的情况下安装最新版本。如果您想要更新包文件中的依赖项,请运行ncu -a。
阅读npm-check-updates的文档,您可以看到区别:
https://www.npmjs.com/package/npm-check-updates
-u, - upgrade:覆盖包文件
-a, - upgradeAll:包括那些最新版本满足声明的semver依赖项的依赖项
ncu是npm-check-updates
的别名,如输入npm-check-updates -u
时在消息中看到的:
[INFO]: You can also use ncu as an alias
从npm版本5.2.0开始,有一种方法可以在一行中运行它,而无需在全局npm注册表中安装任何其他软件包,也无需在本地安装任何软件包。这可以通过利用与npm捆绑在一起的新npx
实用程序来完成。 (Click here to learn more.)
在项目的根目录中运行以下命令:
npx npm-check-updates -u && npm i
如果你正在使用yarn
,yarn upgrade-interactive
是一个非常时尚的工具,可以让你查看过时的依赖项,然后选择你想要更新的。
在npm
上使用纱线的更多理由。嘿。
npm-check-updates
是一个实用程序,可以使用所有依赖项的最新版本自动调整package.json
见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
如果使用yarn,则以下命令将所有包更新为其最新版本:
yarn upgrade --latest
从他们的docs:
upgrade --latest
命令升级软件包与升级命令相同,但忽略package.json中指定的版本范围。相反,将使用最新标记指定的版本(可能会在主要版本之间升级包)。
上述命令不安全,因为切换版本时可能会破坏模块。相反,我推荐以下内容
npm shrinkwrap
命令将实际当前节点模块版本设置为package.json。npm install -g next-update // from your package next-update
如果使用npm 5和节点8,请尝试以下命令
npm update --save
替代方案是
"dependencies":{
"foo" : ">=1.4.5"
}
每次使用npm update时,它都会自动更新到最新版本。有关更多版本的语法,您可以在此处查看:qazxsw poi
解决方案无需额外包
将每个依赖项的版本更改为https://www.npmjs.org/doc/misc/semver.html:
*
然后运行"dependencies": {
"react": "*",
"react-google-maps": "*"
}
。
你的一些软件包已更新,但有些没有?
npm update --save
这是棘手的部分,这意味着你的本地版本“反应”低于最新版本。在这种情况下,npm下载并更新了“react”包。但是,您当地版本的“react-google-maps”与最新版本相同。
如果您仍想“更新”未更改的"dependencies": {
"react": "^15.0.1",
"react-google-maps": "*"
}
,则必须从*
文件夹中删除这些模块。
EG分享越狱。
终于再次运行node_modules
。
node_modules/react-google-maps
如果要更新开发依赖项,请不要忘记运行npm update --save
。
下面的代码(已被接受)给我写了一些类似“它需要太长时间的等等”并且什么也没做。可能使用全球旗帜是问题,idk。
"dependencies": {
"react": "^15.0.1",
"react-google-maps": "^4.10.1"
}
我决定使用我的文本编辑器,而是采用半手动方法。
我从npm update --save-dev
的dev依赖项到notepad ++文本编辑器复制了一个这样的列表(只是更长):
npm i -g npm-check-updates
ncu -u
npm install
我将搜索模式设置为正则表达式,使用package.json
模式获取包名称并将其替换为"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",
。点击“全部替换”。输出是这样的:
^\s*"([^"]+)".*$
我把它复制回bash并点击回车。一切都升级,工作正常。就这样。
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
并升级你的包。我认为这种方式更好,因为如果需要特殊的东西,可以编辑列表,例如保留当前版本的lib。
我通过查看"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",
的说明解决了这个问题
package.json
我找到了最新版NPM的另一种解决方案。我想要做的是用显式最新版本号替换所有“*”依赖项。所讨论的方法都没有对我有用。
我做了什么:
package.json中的所有内容现在都更新到最后一个版本。
Greenkeeper如果你正在使用Github。 $ 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
这是一个Github集成,非常容易设置。安装后,它会自动在您指定的存储库中创建拉取请求(或者如果需要,则自动创建拉取请求),并使代码始终保持最新,而不必强制您手动执行任何操作。然后PR应该触发CI服务的构建,并且根据成功或失败的检查,您可以继续确定触发问题的原因或CI通过时简单地合并PR。
npm-check-updates -u
https://greenkeeper.io/
在底部,您可以看到第一个构建首先失败并且在提交之后(“升级到节点v6.9”)测试通过,所以我最终可以合并PR。也有许多表情符号。
另一种选择是,但是我并没有对它进行密集测试。在第一次看之后,Greenkeeper在一般IMO中看起来更好,并且具有更好的集成。
应该为您提供与您的应用程序兼容的最新通缉版本。但不是最新版本。
由于这些答案最初是写的,所以情况有所改变。
npm outdated
+npm update
+npm shrinkwrap
npm-check-updates
package + npm shrinkwrap
一定要收缩你的deps,否则你可能会结束一个死的项目。前几天我拿出了一个项目,它不会运行,因为我的deps已经过时/更新/乱七八糟。如果我收缩包裹,npm就会安装我需要的东西。
对于那些做到这一点的好奇者来说,这就是我的建议:
npm-check-updates
or npm outdated
to suggest the latest versions.# `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 -rf node_modules
$ npm install
npm-shrinkwrap.json
with npm shrinkwrap
$ rm npm-shrinkwrap.json
$ npm shrinkwrap
npm install
will now use exact versions in npm-shrinkwrap.json
如果你检查npm-shrinkwrap.json
到git,所有安装将使用完全相同的版本。
这是一种从开发(所有更新,一直)转变为生产(没有人接触任何东西)的方法。
要将一个依赖项更新到其最新版本而不必手动打开package.json
并进行更改,您就可以运行
npm install {package-name}@* {save flags?}
即
npm install express@* --save
供参考,npm-install
正如用户Vespakoen在拒绝编辑时指出的那样,也可以这样一次更新多个包:
npm install --save package-nave@* other-package@* whatever-thing@*
他还根据npm outdated
为贝壳配置单线程。有关代码和说明,请参阅the edit。
PS:我也讨厌为这样的事情手动编辑package.json
;)
这适用于npm 1.3.15。
"dependencies": {
"foo": "latest"
}
*
作为最新版本的版本,包括unstablelatest
作为最新稳定版本的版本定义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"
},
我发现上面最好的答案唯一的警告是它将模块更新到最新版本。这意味着它可以更新为不稳定的alpha版本。
我会使用那个npm-check-updates实用程序。我的小组使用了这个工具,它通过安装稳定的更新有效地工作。
正如Etienne所述:安装并运行:
$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install
要查看哪些软件包具有更新版本,请使用以下命令:
npm outdated
只更新一个依赖项只需使用以下命令:
npm install yourPackage@latest --save
例如:
我的package.json
文件有依赖:
"@progress/kendo-angular-dateinputs": "^1.3.1",
那我应该写:
npm install @progress/kendo-angular-dateinputs@latest --save