646

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

  1. 从某个配置文件中获取所需的版本号(我想我可以将它作为评论放在karma.conf.js

  2. 检查定义的 karma runner 版本是否安装在 npm 的全局 repo 中

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

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

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

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

4

16 回答 16

853

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

npm outdated

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

例如,say 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

要更新package.json版本号,请附加--save标志:

npm update --save
于 2013-05-13T23:40:46.637 回答
433

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 安装新版本的软件包
于 2014-06-01T13:13:49.793 回答
177

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

npm-检查

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

在此处输入图像描述

它还提供了一种方便的交互方式来更新依赖项npm-check -u

于 2014-12-14T07:07:27.893 回答
122

一个简单的步骤:

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

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

编辑:

这里发生了什么?

  1. 安装为您检查更新的软件包。

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

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

于 2017-04-13T18:51:33.437 回答
74
  • 要更新单个本地包:

    1. 首先找出你过时的包:

      npm outdated

    2. 然后手动更新您想要的一个或多个包:

      npm update --save package_name

这样就没有必要更新您的本地package.json 文件。

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

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

    npm update package_name

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

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

于 2015-09-02T21:55:53.777 回答
27

您可以尝试以下任一选项:

  1. 检查过时的包

    npm outdated
    

    npm 已过时

  2. 检查并选择要更新的包

    npx npm-check -u
    

    npx npm-检查 -u

于 2018-09-11T08:50:41.423 回答
25

没有额外的包,只检查过时的并更新那些,这个命令会做:

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

于 2019-03-28T20:51:54.560 回答
24

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

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

    npm audit

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

    npm audit fix

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

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

  • 如果您不想使用强制审计修复,那么您可以通过在package-lock.jsonpackage.json文件中更改依赖项版本来手动修复它们。然后运行

npm update && npm upgrade

于 2018-10-23T02:24:15.820 回答
7

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

换句话说,doing: npm install -g karma@0.9.2 将确保只安装 0.9.2 并且如果它已经存在则不会重新安装。

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

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

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

这为您提供了 package.json 定义要使用的 karma 版本的好处,而不必将该配置全局保存在您的 CI 框上。

于 2013-05-13T16:17:01.173 回答
6

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

npm update <package name>

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

您仍然可以使用

npm update --no-save

参考

于 2019-07-08T18:28:56.150 回答
4

另一种方法是首先使用升级 package.json 文件,

ncu -u

使用上述命令的终端快照 然后简单地运行,

npm install

将所有软件包更新到最新版本。ps:它会将所有软件包更新到最新版本,但是如果软件包已经是最新的,则该软件包根本不会受到影响。

于 2021-04-24T06:01:13.303 回答
3

要真正更新一个包,请安装 NCU,然后仅为该包运行它。这将碰到真正的最新消息。

npm install -g npm-check-updates

ncu -f your-intended-package-name -u
于 2018-12-28T10:21:59.933 回答
3

3 个简单的步骤可用于更新所有过时的软件包

首先,检查过时的包

sudo npm i -g npm-check-updates

二、把它们都准备好

ncu -u

终端中的结果将如下所示:

在此处输入图像描述

第三,只需更新所有这些。

npm install

就是这样。

于 2021-07-13T03:41:42.647 回答
3

只需执行此操作即可将所有内容更新到最新版本 -

npx npm-check-updates -u

注意- 系统将提示您安装npm-check-updates. 按下y并输入。

现在运行npm i

你可以走了。

于 2021-08-26T08:12:46.840 回答
1

bash 的另一个:

npm outdated -parseable|cut -d: -f5|xargs -L1 npm i
于 2021-07-06T12:10:48.930 回答
0

我只是对使用我的package.json.

这是一个可以解决这个问题的单线器

npm update `npm outdated | awk '{print $1}' | tr '\n' ' '`

它能做什么:

  1. npm outdated从和获取输出
  2. 将其输送到awk我们仅获取包名称的位置(在第 1 列中)
  3. 然后我们tr用来将换行符转换为空格
  4. 最后——使用反引号——我们使用前面步骤的输出作为参数,npm update这样我们就可以一次获得所有需要的更新。

有人会认为有一种方法可以npm单独使用,但当我查看时它不在这里,所以我只是把它放在这里以防它对任何人有帮助。

** 我相信 MikeMajara 在此处提供了一个类似的答案,但它附加@latest到更新的包名称后,作为我定期更新的一部分,我并不真正感兴趣。

于 2021-11-14T15:49:05.623 回答