发布适配pnpm包的注意事项

114 阅读1分钟

使用npm或者yarn安装包的过程中,node_modules会采取拍平安装(npm3)

比如A依赖B,B依赖C,那么ABC三个包都会装到node_modules目录下

这就会造成一个问题——依赖提升

A包里面能够直接用C包的东西(A包的作者如果图方便)

A包查找的逻辑是:当前目录的node_modules->上级目录的node_modules

由于拍平了,C包的东西是都在上级目录的node_modules中,所以能够访问到

但是此时有个问题

如果B包的作者更新了C包的依赖,但是A包的作者没有及时更新,还是用旧的写法,就会造成错误。

或者B包的作者删除了C包,A包没有更新也会报错。

这就相当于把项目一部分交给别人维护了

和npm不同,pnpm采用了软链接

A包依赖B,所以A包的目录会是这样

▾ node_modules
    ▾ .pnpm
        ▾ A@xxx版本
            ▾ node_modules
                ▸ A
                ▸ B

B在A的node_modules下也是软链接,真实指向的地址是

▾ node_modules
    ▾ .pnpm
        ▾ B@xxx版本
            ▾ node_modules
                ▸ B
                ▸ C

这个时候当A调用C的api时,是找不到的,会直接报错,因为A的上级node_modules并没有C,C只存在B的node_modules之中

所以如果遵守pnpm包的开发规范,A的作者想要用C的话,还是需要在dependencies申明C,而不能导入B后直接调用C