2

我已经检查了 gulp 的全局包 minimatch

$ 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 版本(所有 minimatch@0.2.14 和 minimatch@3.04)更新到最新版本。

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

4

2 回答 2

3

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

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

您应该:

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

npm update gulp

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

npm install minimatch

但是,如果您出于某种原因确实想执行该操作,则可以尝试以下丑陋的 hack:

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

此时gulp应该使用更新的minimatch,虽然npm list还是会显示旧版本号。
同样,强烈不建议这样做,只是为了回答问题而提供。

于 2018-10-24T15:26:56.133 回答
1

这是我的解决方案,您可以使用为 minimatch 包创建符号链接

npm ln
npm link (in package dir)
npm link [<@scope>/]<pkg>[@<version>]

这是更多解释的链接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

于 2018-11-13T10:21:33.737 回答