美文网首页
peerDependencies vs dependencies

peerDependencies vs dependencies

作者: 寂寞的原子 | 来源:发表于2017-07-09 23:54 被阅读850次

    这几天遇到个大坑,就是在代码完全正确的情况下,配置始终不能生效。调试了好久都找不到原因,直到我抱着一丝希望去查看源码,意外发现了问题所在:

    一个包被打包了两次,配置和最终运行的是不同的版本。

    如果你还不了解npm的原理,可以去这里

    接下来先简单介绍一下出问题的项目结构:

    - A
      - B
        - C
      - C
    

    大概就是这样:项目A中,有B和C两个依赖,其中B是一个库,B在dependencies中也依赖了C。

    最初用npm安装的时候,B依赖的C和A依赖的C是同一个版本,所以得到了如下结构:

    - A
      - B@1.0.0 (此处直接依赖上一层的C@1.1.0)
      - C@1.1.0
    

    后来又一次在项目A中升级了版本,得到了如下结构:

    - A
      - B@1.0.0
        - C@1.1.0
      - C@1.2.0
    

    由于B依赖的C和A依赖的C版本不同,所以根据npm的规则,B内部也安装了一个C。

    于是,打包的时候由于两个版本被认为是互不兼容的,所以会分别被打包进去。在B中调用C进行配置的时候运行的是C@^1.1.0,而A中调用C最终使用的时候运行的是C@^1.2.0,所以出现了上面所说的结果,配置始终不能生效。

    发现了问题就好办了,解决方法:dependencies改成peerDependencies,这样就不会在B内部再安装一个C,而只是在版本不兼容时出现warning。

    问题至此解决,总结一下:作为一个库,就不应该随便用dependencies,而应该用peerDependencies

    相关文章

      网友评论

          本文标题:peerDependencies vs dependencies

          本文链接:https://www.haomeiwen.com/subject/ppgehxtx.html