如何使用 npm 更新特定的子包版本

How to update specific sub-package version by using npm

我已经检查了 gulp

的全局包最小匹配
$ npm list -g minimatch

+-- gulp@3.9.1
| `-- vinyl-fs@0.3.14
|   +-- glob-stream@3.1.18
|   | +-- glob@4.5.3
|   | | `-- minimatch@2.0.10  deduped
|   | `-- minimatch@2.0.10
|   `-- glob-watcher@0.0.6
|     `-- gaze@0.5.2
|       `-- globule@0.1.0
|         +-- glob@3.1.21
|         | `-- minimatch@0.2.14  deduped
|         `-- minimatch@0.2.14

现在,我想将特定 gulp 包(所有 minimatch@0.2.14 和 minimatch@3.04)的所有 minimatch 版本更新到最新版本。

他们在 npm 中是否有任何命令更新我现有的包依赖项?

您不能也不应该更新子包(用作其他包的依赖项的包)。

Node 模块旨在包含 node_modules 内指定版本的所有依赖项,以避免新更新出现问题。假设您的 minimatch@3.0.4 引入了一些新功能,现在 glob@4.5.3 可能停止工作,反过来 gulp@3.9.1 也可能停止工作。

您应该:

更新到新的 gulp 版本而不用担心 minimatch

npm update gulp

或者直接使用最新版本的minimatch,使用

npm install minimatch

但是如果你真的出于任何原因想要执行该操作,你可以尝试以下丑陋的技巧:

  • 使用 npm install minimatch@3.0.4
  • 在随机位置的某处安装 minimatch
  • 转到此位置的 node_modules 文件夹并复制 minimatch 文件夹
  • 找到您的 gulp 安装文件夹(这可能取决于您的系统,C:\Users\user\AppData\Roaming\npm\node_modules\gulp 在 Windows 或 /usr/lib/node_modules/gulp/ 在 Linux)
  • gulp 安装文件夹中搜索 minimatch (find . | grep minimatch)
  • 将找到的所有 minimatch 文件夹替换为您刚刚安装在随机位置的文件夹

此时gulp应该使用更新后的minimatch,尽管npm list仍会显示旧版本号。
同样,强烈不推荐这样做,只是为了回答问题而提供的。

这是我的解决方案,您可以使用

为最小匹配包创建符号link
npm ln
npm link (in package dir)
npm link [<@scope>/]<pkg>[@<version>]

这里link有更多的解释https://docs.npmjs.com/cli/link

我认为你不能手动更新它们,因为如果出现问题,你将不得不删除所有内容并重新安装。它有一些迁移问题打扰你然后试试。

npm audit [--json|--parseable]
npm audit fix [--force|--package-lock-only|--dry-run|--production|--only=dev]

这是文档 https://docs.npmjs.com/cli/link