npm检查并更新软件包(如果需要)


471

我们需要将Karma测试运行程序集成到TeamCity中,为此,我想给sys-engineers一个小的脚本(powershell或其他),该脚本将:

  1. 从一些配置文件中选择所需的版本号(我想我可以将其作为注释放在karma.conf.js

  2. 检查是否已在npm的全球回购中安装了已定义的业力赛跑者版本

  3. 如果不是,或者安装的版本比预期的旧:请安装并安装正确的版本

  4. 运行: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

所以我真正的问题是:“如果安装了所需版本的软件包,如何才能签入脚本?”。您应该做支票,还是npm -g install每次都打电话安全?

我不想总是检查并安装最新的可用版本,因为其他配置值可能会变得不兼容

Answers:


609

要检查项目中的任何模块是否“旧”:

npm outdated

' 过时 '将检查其中定义的每个模块,package.json并查看NPM注册表中是否有较新的版本。

例如,说xml2js 0.2.6(位于node_modules当前项目中)已过时,因为存在较新版本(0.2.7)。您会看到:

xml2js@0.2.7 node_modules/xml2js current=0.2.6

更新所有依赖关系,如果您确信这是可取的:

npm update

或者,更新单个依赖项,例如xml2js

npm update xml2js

6
npm update尤其要注意npm update -g……这不是大多数peaole所期望的!参见:github.com/npm/npm/issues/6247gist.github.com/othiym23/4ac31155da23962afd0e
jbandi 2014年

6
@jbandi从npm@2.6.1开始,npm -g update可以安全使用。github.com/npm/npm/issues/6247#issuecomment-92182814
Chuck Le Butt

7
请注意,如@Erik Olson的回答所述,npm update不会更新您的package.json文件。
Ehtesham Hasan

5
As of npm@5.0.0, 'npm update' will change package.json to save the new version as the minimum required dependency docs.npmjs.com/cli/update.html
Sidney

368

npm outdated将标识应更新的软件包,npm update <package name>并可用于更新每个软件包。但是在npm@5.0.0之前,npm update <package name>不会更新package.json中的版本,这是一个问题。

最好的工作流程是:

  1. 识别过期的软件包
  2. 更新package.json中的版本
  3. 运行npm update以安装每个软件包的最新版本

签出npm-check-updates以帮助此工作流程。

  • 安装npm-check-updates
  • 运行npm-check-updates以列出哪些软件包已过期(基本上与运行相同npm outdated
  • 运行npm-check-updates -u以更新package.json中的所有版本(这是神奇的调味料)
  • npm update像往常一样运行,以根据更新的package.json安装软件包的新版本。

3
npm outdated会显示所有软件包..即使在其他软件包中..但这些软件包不会通过此过程进行更新,因此它们始终会出现..所以只需使用npm-check-updates(如您实际建议的那样),它仅显示来自package.json...的主要软件包
davidhq,2015年

使用纱线,只需键入“纱线升级”就容易得多。
Christopher Grigg

17
为什么必须安装更新管理器来管理软件包管理器?我们不同意这是愚蠢的吗?它应该像它一样简单,npm install --all-outdated但事实并非如此……
ADJenks

3
您始终可以运行npm update --save package_name以将最新更改保存到package.json。
trungk18 '19

Erik,您能否回答这个相关的SO问题,因为这仍然让我混淆了两个命令之间的区别,即npm updatevs npm-check-updates
若奥·皮门特尔·费雷拉

146

还有一个名为“新鲜”的模块npm-check

npm检查

检查过时,不正确和未使用的依赖项。

在此处输入图片说明

它还提供了一种方便的交互方式来更新依赖关系。


78

一个简单的步骤:

$ npm i -g npm-check-updates && ncu -u && npm i

就这些。中的所有软件包版本package.json都是最新的主要版本。

编辑:

这是怎么回事

  1. 安装一个可以为您检查更新的软件包。

  2. 使用此软件包来更新您的所有软件包版本package.json(-u是--updateAll的缩写)。

  3. 安装软件包的所有新版本。


3
@imnickvaughn ncu代表节点检查更新,-a是“ upgradeAll”选项。在此处找到所有选项:npmjs.com/package/npm-check-updates
Arian Acosta

如果我想在一行中不使用ncu之类的其他软件包就怎么办?
ADJenks,

或不进行全局安装,npx -p npm-check-updates ncu -u
entozoon

68
  • 要更新单个本地软件包:

    1. 首先找出您过时的包裹:

      npm outdated

    2. 然后将您要手动更新的一个或多个软件包更新为:

      npm update --save package_name

这样就不必更新本地package.json 文件。

请注意,这会将您的软件包更新为最新版本。

  • 如果您在package.json文件中写入某些版本并执行以下操作:

    npm update package_name

    在这种情况下,您将仅获得有关您在package.json文件中编写的版本的下一个稳定版本(所需)。

并且,npm list (package_name)您可以找到本地软件包的当前版本。


14

NPM命令来更新或修复某些依赖清单文件中的漏洞

  • 使用以下命令检查节点模块中的过时或漏洞。

    npm audit

  • 如果发现任何漏洞,请使用以下命令修复所有问题。

    npm audit fix

  • 如果对您不起作用,请尝试

    npm audit fix -f,此命令几乎可以修复所有漏洞。一些依赖项或devDependencies锁定在package-lock.json文件中,因此我们使用-f标志强制更新它们。

  • 如果您不想使用强制审核修复程序,则可以通过在package-lock.jsonpackage.json文件中进行更改来手动修复依赖项版本。然后跑

npm update && npm upgrade



10

没有其他软件包,只需检查过时并更新它们,此命令即可:

npm install $(npm outdated | cut -d' ' -f 1 | sed '1d' | xargs -I '$' echo '$@latest' | xargs echo)


好人,谢谢!
drKreso

这是一个很好的答案,因为可以将其放在任何外壳程序脚本中以自动执行此步骤,而无需依赖于安装任何其他软件包。
Jankapunkt

4

在安装npm软件包(全局或本地)时,可以通过使用@version语法定义要安装的版本来定义特定版本。

换句话说,执行以下操作 npm install -g karma@0.9.2 将确保仅安装0.9.2,如果已经存在,则不会重新安装。

提一个建议,我建议尽可能避免全局npm安装。许多人没有意识到,如果依赖项定义了bin文件,它将被安装到./node_modules/.bin/。通常,使用package.json中定义的已安装模块的本地版本非常容易。实际上,npm脚本会将./node_modules/.bin添加到您的路径中。

例如,这是一个package.json,运行时npm install && npm test将安装在package.json中定义的karma版本,并在运行test脚本时使用该karma版本(安装在node_modules / .bin / karma上):

{
 "name": "myApp",
 "main": "app.js",
 "scripts": {
   "test": "karma test/*",
 },
 "dependencies": {...},
 "devDependencies": {
   "karma": "0.9.2"
 }
}

这使您可以使用package.json定义要使用的业力版本,而不必将该配置全局保留在CI框中。


什么在test脚本?您能给我一个提示,如何用脚本安装它。
iLemming

1
查看package.json。在“脚本”属性下,您可以定义另一个属性“测试”,其值是您键入时要运行的命令npm test。npm文档在这里非常好:npmjs.org/doc/scripts.html
addisonj 2013年

4

npm@5.0.0+开始,您可以执行以下操作:

npm update <package name>

这将自动更新package.json文件。我们不必手动更新最新版本,然后使用npm update <package name>

您仍然可以使用

npm update --no-save

参考


1

要只更新一个软件包,请安装NCU,然后仅对该软件包运行。这将达到真正的最新。

npm install -g npm-check-updates

ncu -f your-intended-package-name -u

6
低质量的帖子,一些更好的解释会有所帮助。
linuxfan说恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.