ChatGPT解决这个技术问题 Extra ChatGPT

npm 检查并根据需要更新包

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

从某个配置文件中获取所需的版本号(我想我可以将其作为注释放在 karma.conf.js 中)检查是否在 npm 的全局 repo 中安装了定义的 karma runner 版本,如果不是,或者安装的版本是比期望的旧:选择并安装正确的版本运行它: karma start .\Scripts-Tests\karma.conf.js --reporters teamcity --single-run

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

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


d
dialex

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

npm outdated

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

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

xml2js@0.2.7 node_modules/xml2js current=0.2.6

对于update所有依赖项,如果您确信这是可取的:

npm update

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

npm update xml2js

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

npm update --save

小心 npm update 尤其是 npm update -g ...它不是大多数人期望它做的!请参阅:github.com/npm/npm/issues/6247gist.github.com/othiym23/4ac31155da23962afd0e
@jbandi 从 npm@2.6.1 开始,npm -g update 可以再次安全使用。 github.com/npm/npm/issues/6247#issuecomment-92182814
请注意,如@Erik Olson 的回答所述,npm update 不会更新您的 package.json 文件。
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
刚刚在我的 npm 5.6.0 上做了 npm update,它破坏了所有代码;幸运的是我在这样做之前备份了我的文件
C
Corey

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

最好的工作流程是:

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

查看 npm-check-updates 以帮助完成此工作流程。

安装 npm-check-updates

运行 npm-check-updates 以列出哪些包已过期(与运行 npm outdated 基本相同)

运行 npm-check-updates -u 来更新你的 package.json 中的所有版本(这是神奇的酱汁)

像往常一样运行 npm update 以根据更新的 package.json 安装新版本的包


npm outdated 将显示所有包.. 即使在其他包中.. 但这些包不会通过此过程更新,因此它们将始终出现.. 所以只需使用 npm-check-updates(如您实际推荐的那样),它仅显示来自的主要包package.json ...这是相关的
使用纱线,只需输入“纱线升级”就容易多了。
为什么我必须安装更新管理器来管理我的包管理器?我们不同意这是愚蠢的吗?它应该像 npm install --all-outdated 一样简单,但它不是......
您始终可以运行 npm update --save package_name 以保存对 package.json 的最新更改。
Erik,您能否回复一下 this related SO question,因为这两个命令之间的区别(即 npm updatenpm-check-updates)对我来说仍然有点混乱?
P
Paolo

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

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

https://i.stack.imgur.com/InFAV.png

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


C
Community

一个简单的步骤:

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

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

编辑:

这里发生了什么?

安装为您检查更新的软件包。使用此包更新 package.json 中的所有包版本(-u 是 --updateAll 的缩写)。安装所有新版本的软件包。


@imnickvaughn ncu 代表节点检查更新,-a 是“upgradeAll”选项。在此处查找所有选项:npmjs.com/package/npm-check-updates
如果我想在一行中完成它而不使用像 ncu 这样的另一个包怎么办?
或者没有全局安装,npx -p npm-check-updates ncu -u
根据 semvernpm-check-updates 进行了重大更新,其中可能有重大更改。小心使用它:stackoverflow.com/a/48917961/1243247
r
reectrix

更新单个本地包:首先找出你过时的包:npm outdated 然后手动更新你想要的包:npm update --save package_name

首先找出你过时的包:npm outdated

然后手动更新您想要的一个或多个包: npm update --save package_name

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

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

如果您在 package.json 文件中编写某个版本并执行以下操作: npm update package_name 在这种情况下,您将获得关于您在 package.json 文件中编写的版本的下一个稳定版本(想要的)。

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


K
KyleMit

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

检查过时的软件包 npm outdated 检查并选择要更新的软件包 npx npm-check -u


npm-check 太棒了,谢谢分享!
M
MikeMajara

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

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


这是一个很好的答案,因为它可以放在任何 shell 脚本中以自动执行此步骤,而无需依赖安装任何其他软件包。
S
Smit Patel

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

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

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

如果它对您不起作用,请尝试 npm audit fix -f,此命令几乎可以修复所有漏洞。一些依赖或 devDependencies 被锁定在 package-lock.json 文件中,所以我们使用 -f 标志来强制更新它们。

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

npm update && npm upgrade


我跑了 npm audit fix --force。现在我比以前有更多的漏洞。我可以再次运行它,但它不会改变。怎么办?
a
addisonj

在安装 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 版本,并在运行时使用该版本的 karma(安装在 node_modules/.bin/karma) test 脚本:

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

这使您受益于 package.json 定义要使用的业力版本,而不必将该配置全局保存在 CI 框上。


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

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

npm update <package name>

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

您仍然可以使用

npm update --no-save

(Reference)


我有 npm@7.21.1,但它不会自动更新我的 package.json。运行 npm update <package name> --save 也没有帮助!
s
soraku02

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

ncu -u

https://i.stack.imgur.com/mH2f1.png

npm install

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


P
Phong

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

首先,检查过时的包

sudo npm i -g npm-check-updates

二、把它们都准备好

ncu -u

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

https://i.stack.imgur.com/3ySIe.png

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

npm install

而已。


H
Hari Reddy

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

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

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


C
Community

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

npm install -g npm-check-updates

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

低质量的帖子,一些更好的解释会有所帮助。
R
Ronen

bash 的另一个:

npm outdated -parseable|cut -d: -f5|xargs -L1 npm i

t
tres

我只是对使用 package.json 中的语义版本控制规则更新过时的包感兴趣。

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

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

它能做什么:

从 npm outdated 获取输出并将其通过管道传输到 awk 中,我们只获取包的名称(在第 1 列中),然后我们使用 tr 最终将换行符转换为空格 - 使用反引号 - 我们正在使用前面步骤的输出作为 npm update 的参数,因此我们可以一次性获得所有需要的更新。

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

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


N
Normal

如果要将软件包升级到最新版本(主要、次要和补丁),请将 @latest 关键字附加到软件包名称的末尾,例如:

npm i express-mongo-sanitize@latest

这会将 express-mongo-sanitize 从版本 1.2.1 更新到版本 2.2.0。

如果您想知道哪些软件包已过时以及哪些可以更新,请使用 npm outdated 命令

前任:

$ npm outdated
Package             Current   Wanted  Latest  Location                         Depended by
express-rate-limit    3.5.3    3.5.3   6.4.0  node_modules/express-rate-limit  apiv2
helmet               3.23.3   3.23.3   5.1.0  node_modules/helmet              apiv2
request-ip            2.2.0    2.2.0   3.3.0  node_modules/request-ip          apiv2
validator           10.11.0  10.11.0  13.7.0  node_modules/validator           apiv2