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

时间:2018-10-24 10:34:55

标签: javascript node.js npm gulp minimatch

我检查了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

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

npm中的任何命令是否可以更新我现有的软件包依赖项?

2 个答案:

答案 0 :(得分:2)

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

节点模块旨在在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安装文件夹(这可能取决于您的系统,在Windows上为C:\Users\user\AppData\Roaming\npm\node_modules\gulp,在Linux上为/usr/lib/node_modules/gulp/
  • minimatch安装文件夹(gulp)中搜索find . | grep minimatch
  • 将所有找到的minimatch文件夹替换为您刚刚安装在随机位置的文件夹

这时gulp应该使用更新的minimatch,尽管npm list仍会显示旧版本号。
同样,强烈不建议这样做,仅是为了回答问题。

答案 1 :(得分: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