济宁500元网站建设,职业生涯规划大赛是什么,如何做自己的网站后台,网站备案需要什么npm扁平的node_modules结构比如项目依赖了A 和 C#xff0c;而 A 和 C 依赖了不同版本的 B1.0 和 B2.0#xff0c;D也依赖B1.0, node_modules 结构如下#xff1a;node_modules
├── A1.0.0
├── B1.0.0
└── C1.0.0└── node_modules└── B2.0.0C依赖的B2.0因为版…npm扁平的node_modules结构比如项目依赖了A 和 C而 A 和 C 依赖了不同版本的 B1.0 和 B2.0D也依赖B1.0, node_modules 结构如下node_modules
├── A1.0.0
├── B1.0.0
└── C1.0.0└── node_modules└── B2.0.0C依赖的B2.0因为版本号原因还放在C的node_modules下幽灵依赖幽灵以来是指在package.json中未定义的依赖但项目中依然可以被引用到比如上方我们package.json只安装了A和C{dependencies: {A: ^1.0.0,C: ^1.0.0}
}由于B在安装时被提升到了和A同样的级别所以在项目中可以正常引用B幽灵依赖是由依赖的声明丢失造成的如果某天某个版本A依赖不在依赖B或者B版本发生了变化那么就会造成依赖缺失和兼容性问题依赖分身假设继续再安装依赖 B1.0 的 D 模块和依赖 B2.0 的 E 模块此时A 和 D 依赖 B1.0 C E 依赖 B2.0 以下是提升 B1.0 的 node_modules 结构node_modules
├── A1.0.0
├── B1.0.0
├── D1.0.0
├── C1.0.0
│ └── node_modules
│ └── B2.0.0
└── E1.0.0└── node_modules└── B2.0.0可以看到 B2.0 会被安装两次实际上无论提升 B1.0 还是 B2.0都会存在重复版本的 B 被安装这两个重复安装的 B 就叫 依赖分身yarnyarn也是用扁平化node_modules结构提升安装速度在npm安装依赖时安装任务是串行的。这意味着需要等待一个结束再进行下一个为了加快安装速度yarn采用了并行操作。在缓存机制上yarn会将每个包缓存再磁盘上在下一次安装这个包时可以脱离网络实现从磁盘离线安装。与npm一样的弊端yarn和npm一样扁平化结构没有解决幽灵依赖和依赖分身的问题pnpm内容寻址存储该策略会将包安装在系统的全局store中依赖的每个版本只会在系统中安装一次在引用项目node_modules的依赖时会通过硬链接和软链接在全局store中找到这个文件。为了实现此过程node_modules下会多出.pnpm目录而且是非扁平化结构硬链接可以理解为源文件的副本项目安装的其实是副本它使得用户可以通过路径引用查到全局store中的源文件而且这个副本根本不占任何空间。同时pnpm会在全局store里存储硬链接不同的项目可以从全局store寻到同一个依赖大大的节省了磁盘空间软链接可以理解为快捷方式pnpm可以通过找到它对应的磁盘目录下的依赖地址