npm是前端工程化安装依赖包的重要方式,理解npm的整个过程,是掌握前端工程化的基础。
下载
首先,是下载部分,npm install命令之后会先去node_modules目录下寻找是否有相应的模块,如果没有才会根据registry中的压缩包地址去下载。
安装
首先npm会执行preinstall钩子,如果没定义,则执行空函数后通过。接着,开始安装此模块的首层依赖,这个是通过package.json中dependencies的定义来查找和安装的。工程本身可以看做是整个依赖树的根节点,每个首层依赖树都是这个根节点下面的一颗子树,npm会从首层依赖树的根节点依次寻找更深层次的依赖模块。
模块扁平化
那么问题来了,如果a模块依赖了react,b模块也依赖了react,这个react模块会被下载2次甚至更多么?在npm3之前真的是这样,造成了网络带宽的浪费以及时间的浪费。因此,npm3中对这个问题做了改进,在下载之前就遍历所有的依赖,把所有的依赖拉平,也就是说本来是多棵树a-->c, b-->c,就会变成需要安装a, b, c。这个过程叫做npm-dedupe。
npm的生命周期
公众号
最后,欢迎大家关注我的微信公众号,会持续更新,不见不散。