如果需要,npm检查并更新包

问题描述 投票:341回答:10

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

  1. 从一些配置文件中获取所需的版本号(我想我可以把它作为评论放在karma.conf.js中)
  2. 检查是否在npm的全局仓库中安装了定义版本的karma runner
  3. 如果不是,或者安装的版本比预期版本旧:选择并安装正确的版本
  4. 运行它:karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

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

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

node.js teamcity npm karma-runner
10个回答
454
投票

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

npm outdated

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

下面是一个示例,显示xml2js(位于当前目录中的node_modules /中)已过时,因为存在较新的版本(0.2.7):

[email protected] node_modules/xml2js current=0.2.6

如果你想检查过时的模块并安装更新的版本,你可以这样做:npm update(适用于所有模块)或npm update xml2js(仅检查/更新xml2js)

看看NPM文档:


1
投票

要真正更新一个软件包安装NCU,然后只为该软件包运行它。这将碰到真正的最新。

npm install -g npm-check-updates

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

0
投票

[email protected]+开始,你可以做到:

npm update <package name>

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

你仍然可以使用旧的行为

npm update --no-save

(Qazxswpoi)


323
投票

npm outdated将识别应更新的软件包,npm update <package name>可用于更新每个软件包。但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安装新版本的软件包

130
投票

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

ASL检查

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

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


64
投票
  • 要更新单个本地包: 首先找出你过时的套餐: npm outdated 然后手动更新您想要的软件包: npm update --save package_name

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

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

  • 如果你在package.json文件中写了一些版本并执行: npm update package_name 在这种情况下,您将获得有关您在package.json文件中编写的版本的下一个稳定版本(通缉)。

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


57
投票

一个简单的步骤:

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

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

编辑:

这里发生了什么?

  1. 安装检查更新的程序包。
  2. 使用此软件包更新package.json中的所有软件包版本(-a是--updateAll的缩写)。
  3. 安装所有新版本的软件包。

10
投票

NPM commands to update or fix vulnerabilities in some dependency manifest files

  • 使用以下命令检查节点模块中的过期或漏洞。 npm audit
  • 如果发现任何漏洞,请使用以下命令修复所有问题。 npm audit fix
  • 如果它不适合你,那么试试吧 npm audit fix -f,这个命令几乎可以修复所有漏洞。某些依赖项或devDependencies在package-lock.json文件中被锁定,因此我们使用-f标志强制更新它们。
  • 如果您不想使用强制审计修复程序,则可以通过在package-lock.json和package.json文件中更改它们来手动修复依赖项版本。然后运行`npm update && npm upgrade'

8
投票

检查过时的包裹

npm outdated

检查并选择要更新的包

npx npm-check -u

npm oudated img

npx npm-check -u img


5
投票

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

换句话说,执行:npm install -g [email protected]将确保仅安装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的好处,它定义了要使用的karma版本,而不必在CI框中全局保留该配置。


3
投票

没有额外的包,只需检查过时并更新那些,这个命令将执行:

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

© www.soinside.com 2019 - 2024. All rights reserved.