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

iLe*_*ing 400 teamcity node.js npm karma-runner

我们需要将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每次都可以安全地打电话?

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

小智 513

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

package.json

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

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

npm outdated
Run Code Online (Sandbox Code Playgroud)

如果要检查过时的模块并安装更新的版本,则可以执行以下操作 xml2js 0.2.6:(对于所有模块)或node_modules(仅检查/更新xml2js)

看看NPM文档:

  • 请注意,npm update不会更新您的package.json文件,如@Erik Olson的答案所述. (7认同)
  • 注意`npm update`特别是`npm update -g` ...它不是大多数人所期望的!请参阅:https://github.com/npm/npm/issues/6247和https://gist.github.com/othiym23/4ac31155da23962afd0e (6认同)
  • @jbandi从npm@2.6.1开始,`npm -g update`可以再次使用.https://github.com/npm/npm/issues/6247#issuecomment-92182814 (6认同)
  • 从npm@5.0.0开始,'npm update'将更改package.json以将新版本保存为所需的最低依赖性`https://docs.npmjs.com/cli/update.html (4认同)
  • 刚刚在我的 npm 5.6.0 上执行了“npm update”,它破坏了所有代码;幸运的是我在这样做之前备份了我的文件 (2认同)

Eri*_*son 343

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安装新版本的软件包

  • 为什么我必须安装更新管理器来管理我的包管理器?我们不同意这是愚蠢的吗?它应该像`npm install --all-outdated`一样简单,但它不是...... (10认同)
  • `npm outdated`将显示所有包..甚至在其他包中......但是这些程序不会更新,因此它们将始终显示..所以只需使用`npm-check-updates`(如你实际推荐的那样)只显示来自`package.json`的主要包...这是相关的 (3认同)
  • 您始终可以运行`npm update --save package_name`将最新更改保存到package.json。 (3认同)
  • @ADJenks,因为根据“semver”,“npm-check-updates”进行了重大更新,这可能会有重大更改,而“npm update”只进行安全的次要更新和补丁更新。请参阅:/sf/answers/3424257301/ (3认同)
  • 使用纱线,只需输入“纱线升级”就容易多了。 (2认同)
  • 埃里克,您能否请回复[这个相关的SO问题](/sf/ask/3994873571/),因为它对我来说仍然有点令人困惑两个命令之间的区别,即“npm update”与“npm-check-updates”? (2认同)

ale*_*cxe 137

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

NPM-检查

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

在此输入图像描述

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


gug*_*gol 67

  • 要更新单个本地包:

    1. 首先找出你过时的套餐:

      npm outdated

    2. 然后手动更新您想要的软件包:

      npm update --save package_name

这样就无需更新本地package.json 文件.

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

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

    npm update package_name

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

而随着npm list (package_name)你可以找到你的本地包的当前版本.


Mat*_*att 64

一个简单的步骤:

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

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

编辑:

这里发生了什么?

  1. 安装检查更新的程序包.

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

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

  • 或者没有全局安装,`npx -p npm-check-updates ncu -u` (9认同)
  • @imnickvaughn`ncu`代表节点检查更新,`-a`代表'upgradeAll'选项.在此查找所有选项:https://www.npmjs.com/package/npm-check-updates (3认同)
  • 如果我想在一行中完成而不使用像 ncu 这样的另一个包怎么办? (2认同)
  • 根据“semver”的说法,“npm-check-updates”进行了重大更新,这可能会发生重大更改。小心使用:/sf/answers/3424257301/ (2认同)

Lon*_*ran 12

检查过时的包裹

npm outdated
Run Code Online (Sandbox Code Playgroud)

检查并选择要更新的包

npx npm-check -u
Run Code Online (Sandbox Code Playgroud)

npm oudated img

npx npm-check -u img


Smi*_*tel 11

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

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

    npm audit

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

    npm audit fix

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

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

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


adi*_*iga 7

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

npm update <package name>
Run Code Online (Sandbox Code Playgroud)

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

您仍然可以使用

npm update --no-save
Run Code Online (Sandbox Code Playgroud)

参考

  • 我有“npm@7.21.1”,它不会自动更新我的“package.json”。运行 `npm update &lt;package name&gt; --save` 也没有帮助! (5认同)

Har*_*ddy 7

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

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

现在运行npm i。你可以走了。


Huu*_*yen 6

您可以使用 3 个简单步骤来更新所有过时的软件包

首先,检查过时的软件包

sudo npm i -g npm-check-updates

其次,将它们全部准备好

ncu -u

终端中的结果将是这样的:

在此输入图像描述

第三,更新所有内容。

npm install

就是这样。


add*_*onj 5

安装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"
 }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 查看 package.json。在“scripts”属性下,您可以定义另一个属性“test”,其值是您在键入 `npm test` 时要运行的命令。npm 文档在这里非常好:https://npmjs.org/doc/scripts.html (3认同)
  • `test` 脚本中有什么?你能告诉我你是如何用脚本安装它的吗? (2认同)

reg*_*bsb 5

要真正只更新一个软件包,请安装 NCU,然后仅针对该软件包运行它。这将触及真正的最新版本。

npm install -g npm-check-updates

ncu -f your-intended-package-name -u
Run Code Online (Sandbox Code Playgroud)


Mik*_*ara 5

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

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

  • 这是一个很好的答案,因为它可以放入任何 shell 脚本中以自动执行此步骤,而无需依赖安装任何其他软件包。 (6认同)

sor*_*u02 5

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

ncu -u
Run Code Online (Sandbox Code Playgroud)

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

npm install
Run Code Online (Sandbox Code Playgroud)

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


Pir*_*App 5

到 2022 年,您可以完全自动完成此操作

  1. 安装npm 检查更新

  2. 运行命令

    ncu--医生-u

  3. 它将首先尝试您拥有的每个依赖项并运行测试,如果测试失败,它将一一更新每个依赖项并在每次更新后运行测试