Dreamer Dreamer
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

lycpan233

白日梦想家
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Mysql

  • Node

    • npm为什么父项目指定依赖版本后,可以影响到子项目的依赖
      • 背景
      • 结论
      • 相关文档
    • MacOS pnmp多个项目同个包,为什么没有共享存储空间?
    • pnpm 使用指南
    • pnpm 下载依赖更换源不生效
    • Commitizen + Commitlint + husky 实践
    • package.json 中波浪号~ 异或号^ 是什么意思?
  • Go

  • Docker

  • 后端
  • Node
lycpan233
2024-01-08
目录

npm为什么父项目指定依赖版本后,可以影响到子项目的依赖

# 背景

在实际开发过程中,经常存在某三方包,更新了一个新版本,导致项目 run 不起来。 存在一些复杂场景,加入当前项目 A 依赖了 B 、 C,B 依赖了 C :

    A => 
        B => C
        C 
1
2
3

假如常用的 C 版本是 1.0.1 ,但是其更新了 1.0.2 ,导致不兼容。

这时候我们期望在 A 中锁定 C 的版本,同时也期望能让 B 的版本也维持在 1.0.1。

# 结论

在实际操作中,只需要把 A => C 的版本指定为 1.0.1 即可,B => C 的版本也会采用 1.0.1。结论很让人迷惑,因为我们都知道,更改父的依赖版本,并不能锁定子的版本。

经过实验和查阅资料,确定结果:

  • 当安装到相同模块时,判断已安装的模块版本是否符合新模块的版本范围,如果符合则跳过,不符合则在当前模块的 node_modules 下安装该模块。

怎么理解这段,看下面的示例。

假如 A => C@1.0.1 ,B => C@^1.0.0。这时候先安装 C@1.0.1,检查到 B => C 时,发现 C@1.0.1 符合 C@^1.0.0 := C@^1.0.0 >= && < C@^2.0.0 ,所以不安装新包,采用当前已安装的依赖。

因此表象就是,我在父项目回退了版本,子项目居然也回退了。

# 相关文档

npm install 原理分析 (opens new window)

编辑 (opens new window)
上次更新: 2025/04/15, 03:48:14
Mysql SQL 优化思路
MacOS pnmp多个项目同个包,为什么没有共享存储空间?

← Mysql SQL 优化思路 MacOS pnmp多个项目同个包,为什么没有共享存储空间?→

最近更新
01
docker基础概念
02-26
02
js 获取变量准确类型
02-19
03
Mysql SQL 优化思路
02-18
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Dreamer | MIT License
粤ICP备2025379918号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式