「工具链🛠️」你难道只觉得cnpm只是npm国内镜像吗?cnpm竟然也可以解决“幽灵依赖”!🤡🤡

427 阅读3分钟

Hi!这里是JustHappy的技术博客,前几天在扒pnpm实现原理的时候偶然发现!我们的cnpm既然也采用了非扁平化的node_modules结构,这意味着cnpm已经不是从前我们认识的单纯的npm国内镜像那么简单了,当前cnpm甚至可以解决幽灵依赖,所以让我们来重新认识一下cnpm吧!

image.png

我是怎么发现的...

在写上一篇文章的时候,我记忆里cnpm只是npm的国内镜像,那它的包管理构建的node_modules肯定是和npm一样,应该是扁平化的,于是一开始我直接选择cnpm与pnpm进行比对,毕竟国内镜像要快很多嘛,但是我对同一项目分别使用cnpm和pnpm安装依赖后就发现不太对劲,这俩怎么那么像呢?下图是左边是使用cnpm,右边是使用pnpm

image.png

你会发现这哥俩基本一个模子刻出来的,除了 .pnpm 文件夹变成了 .store,其他的结构上基本没什么区别,事实上.store文件夹的作用和.pnpm的作用是一模一样的

事实是什么呢?

cnpm也构建了一个非扁平化node_modules,那我们可以大胆的提出一个结论,cnpm也可以解决幽灵依赖的问题!

我们不妨来尝试一下

可以看到我们这个项目上是没有安装lodash的,我们先来试试在使用npm安装依赖的情况下会发生什么?我在项目文件中使用了一下代码来测试

image.png

可以看到正常执行了,我们成功的在项目中引用了package.json文件中并没有声明的文件,我们的浏览器和node都没有报错,我们实质上是实现了一个 “幽灵依赖”

image.png

那我们使用cnpm试试吧,结果如下!cnpm解决了幽灵依赖!!!

image.png

由此我们可以得出结论,cnpm不止是一个国内npm镜像源那么简单,cnpm和pnpm一样使用非扁平化的node_modules结构解决了幽灵依赖

那么cnpm有什么更好的地方

得益于国内镜像的通畅性,cnpm安装包的速度甚至会比pnpm要快!是的,你没有听错!

image.png

对于同一项目使用pnpm安装依赖用了13.4s

image.png

cnpm只需要4s!!

有关镜像站

这是cnpm的镜像站,真的非常感谢阿里的团队可以长期运营这个公益性的镜像站!截止发文npmmirror的下载数据如下。

image.png

同时像python的清华源之类的国内镜像站,虽然说很多情况下我们使用这些服务是出于种种的不方便,但是还是很感谢有这么一群人,愿意提供开源镜像服务!

所以,如果哪天有个人问该使用哪个包管理工具,或许我会推荐他使用cnpm

这波填一个坑哈😁,前阵子写的一篇文章

「工具链🛠️」npm ? Yarn ? pnpm ? cnpm ? bun ? 我***到底要用哪个? 💢💢(聊一聊软件包下载器)