V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yazoox
V2EX  ›  Node.js

又犯迷糊了,这个我们的项目 A 依赖两个包 B 和 C,但 B 和 C 依赖同一个包 D,只是版本不同。

  •  
  •   yazoox · 2022-03-17 17:54:40 +08:00 · 7394 次点击
    这是一个创建于 742 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这种情况下,npm 会如何管理包?

    我在 node_modules 的目录下面,只看到了 D 的最新版本,即 C 依赖的 D 的版本文件,B 依赖的低版本的 D 看不到。这个是咋回事么?

    然后在 yarn.lock 文件里,D 的两个版本都有......

    7 条回复    2022-06-19 10:26:57 +08:00
    foolnius
        1
    foolnius  
       2022-03-17 17:58:44 +08:00
    B 包里面有一个 node_modules ,C 包里面也有一个 node_modules
    FreshOldMan
        2
    FreshOldMan  
       2022-03-17 18:01:15 +08:00
    npm 的正常操作,两个版本的 D 会都下载下来
    yazoox
        3
    yazoox  
    OP
       2022-03-17 18:01:52 +08:00
    @FreshOldMan 下载下来后,放在哪里?
    libook
        4
    libook  
       2022-03-17 18:05:15 +08:00
    很多包是依赖模糊版本,比如“~”开头的和“^”开头的都是会自动选择一个区间范围,如果 B 和 C 依赖的 D 版本区间有交集,是可以共用同一个版本的 D 的。
    yazoox
        5
    yazoox  
    OP
       2022-03-17 18:25:22 +08:00
    找到一篇文章,基本看明白了。“扁平化” 和 “依赖提升”
    https://juejin.cn/post/6932046455733485575
    feimo1996
        6
    feimo1996  
       2022-03-23 11:59:30 +08:00
    这种情况如果 D 的两个版本没啥兼容性问题那就还好。
    willx12123
        7
    willx12123  
       2022-06-19 10:26:57 +08:00
    你用的是 yarn 的话,B 、C 如果依赖了同一个版本的 D ,那么 D 会和 B 、C 同级别出现,就像这样:

    ```
    node_modules
    - D
    - B
    - C
    ```

    如果不同的话,那么 yarn 可能会将其中一个提升到同级别,然后另一个包下会出现一个 node_modules ,就好象这样:

    ```
    node_modules
    - [email protected]
    - B
    - C
    - node_modules
    - [email protected]
    ```

    yarn 会尽可能的去打平依赖,除非版本不同。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5759 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 06:12 · PVG 14:12 · LAX 23:12 · JFK 02:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.