当前位置: 首页 > news >正文 php网站开发实验总结网站权重最高 news 2025/11/1 0:34:40 php网站开发实验总结,网站权重最高,平面广告设计工作内容,微信免费小程序开发平台前言 pnpm对比npm/yarn的优点#xff1a; 更快速的依赖下载更高效的利用磁盘空间更优秀的依赖管理 我们按照包管理工具的发展历史#xff0c;从 npm2 开始讲起#xff1a; npm2 使用早期的npm1/2安装依赖#xff0c;node_modules文件会以递归的形式呈现#xff0c;严格…前言 pnpm对比npm/yarn的优点 更快速的依赖下载更高效的利用磁盘空间更优秀的依赖管理 我们按照包管理工具的发展历史从 npm2 开始讲起 npm2 使用早期的npm1/2安装依赖node_modules文件会以递归的形式呈现严格按照package.json结构以及次级依赖的package.json将依赖安装到各自的node_modules中直至次级依赖不再依赖其他模块 举例 foo - barfoo依赖于bar node_modules └─ foo├─ index.js├─ package.json└─ node_modules└─ bar├─ index.js└─ package.jsonfoo1 - barfoo2 - barbar会被安装两次 node_modules ├─ foo1 │ ├─ index.js │ ├─ package.json │ └─ node_modules │ └─ bar │ ├─ index.js │ └─ package.json └─ foo2├─ index.js├─ package.json└─ node_modules└─ bar├─ index.js└─ package.json一些其他问题 ● 依赖层级太深会导致文件路径过长windows 的文件路径最长是 260 多个字符这样嵌套是会超过 windows 路径的长度限制的。 ● 这样的嵌套重复的包被安装导致node_modules文件体积巨大占用过多的磁盘空间 当时 npm 还没解决社区就出来新的解决方案了就是 yarn npm3/yarn yarn 是怎么解决依赖重复很多次嵌套路径过长的问题的呢 铺平。所有的依赖不再一层层嵌套了而是全部在同一层采用“扁平化”的方式去管理依赖这样也就没有依赖重复多次的问题了也就没有路径过长的问题了。 举例 foo1 - barfoo2 - bar node_modules ├─ bar │ ├─ index.js │ └─ package.json ├─ foo1 │ ├─ index.js │ └─ package.json └─ foo2├─ index.js└─ package.jsonfoo1 - bar1.0.0foo2 - bar2.0.0 node_modules ├─ bar1.0.0 │ ├─ index.js │ └─ package.json ├─ foo1 │ ├─ index.js │ └─ package.json └─ foo2├─ index.js└─ package.json└─ node_modules└─ bar2.0.0├─ index.js└─ package.json为什么还有嵌套呢 因为一个包是可能有多个版本的提升只能提升一个所以后面再遇到相同包的不同版本依然还是用嵌套的方式。 使用扁平化的方案解决了npm2中出现的问题但是也带来一些问题 幽灵依赖 就是明明没有在dependencies中声明的依赖但是却可以require进来。很容易理解就是依赖都铺平了那依赖的依赖也是可以找到的。 出现幽灵依赖是有隐患的比如因为没有显式依赖万一有一天别的包不依赖这个包了那你的代码也就不能跑了因为你依赖这个包但是现在不会被安装了。 浪费磁盘空间的问题 上面提到的依赖包有多个版本的时候只会提升一个那其余版本的包不还是复制了很多次么依然有浪费磁盘空间的问题。 那社区有没有解决这俩问题的思路呢 当然有这不是 pnpm 就出来了嘛。 那 pnpm 是怎么解决这俩问题的呢 pnpm 回想下 npm3 和 yarn 为什么要做 node_modules 扁平化不就是因为同样的依赖会复制多次并且路径过长在 windows 下有问题么 那如果不复制呢比如通过 link。 首先介绍下 link也就是软硬连接这是操作系统提供的机制。 硬连接就是同一个文件的不同引用而软链接是新建一个文件文件内容指向另一个路径。当然这俩链接使用起来是差不多的。 如果不复制文件只在全局仓库保存一份 npm 包的内容其余的地方都 link 过去呢 这样不会有复制多次的磁盘空间浪费而且也不会有路径过长的问题。因为路径过长的限制本质上是不能有太深的目录层级现在都是各个位置的目录的 link并不是同一个目录所以也不会有长度限制。 没错pnpm 就是通过这种思路来实现的。 再把 node_modules 删掉然后用 pnpm 重新装一遍执行 pnpm install。 你会发现它打印了这样一句话 包是从全局 store 硬连接到虚拟 store 的这里的虚拟 store 就是 node_modules/.pnpm。 只要是在同一台机器下下次安装依赖的时候pnpm会先检查store目录如果有你需要安装的依赖则会通过一个硬链接到你的项目中去而不是重新安装依赖。这也就表明为什么pnpm性能这么突出了最大程度的节省了时间消耗和磁盘空间。 我们打开 node_modules 看一下 确实不是扁平化的了依赖了 express那 node_modules 下就只有 express没有幽灵依赖。 展开 .pnpm 看一下 所有的依赖都在这里铺平了都是从全局 store 硬连接过来的然后包和包之间的依赖关系是通过软链接组织的。 比如 .pnpm 下的 expresss这些都是软链接 也就是说所有的依赖都是从全局 store 硬连接到了 node_modules/.pnpm 下然后之间通过软链接来相互依赖。 举例说明 项目依赖foo1.0.0 node_modules ├─ .pnpm │ └─ foo1.0.0 │ └─ node_modules │ └─ foo - store/foo │ ├─ index.js │ └─ package.json │ └─ foo项目依赖了foo1.0.0、bar1.0.0bar也依赖了foo1.0.0 node_modules ├─foo - ./.pnpm/foo1.0.0/node_modules/foo ├─bar - ./.pnpm/bar1.0.0/node_modules/bar └─.pnpm├─ bar1.0.0│ └─ node_modules│ ├─ foo - ../../foo1.0.0/node_modules/foo│ └─ bar - store/bar└─ foo1.0.0└─ node_modules└─ foo - store/foo为什么需要同软链接的方式去引用实际的依赖呢其实这样设计的目的是解决“幽灵依赖”问题只有声明过的依赖才会以软链接的形式出现在node_modules目录中在实际项目中引用的是软链接软链接指向的是 .pnpm 的真实依赖所以在日常开发中不会引用到未在 package.json 声明的包。 官方给了一张原理图配合着看一下就明白了 这就是 pnpm 的实现原理。 那么回过头来看一下pnpm 为什么优秀呢 首先最大的优点是节省磁盘空间呀一个包全局只保存一份剩下的都是软硬连接这得节省多少磁盘空间呀。 其次就是快因为通过链接的方式而不是复制自然会快。 这也是它所标榜的优点 相比 npm2 的优点就是不会进行同样依赖的多次复制。 相比 yarn 和 npm3 呢那就是没有幽灵依赖也不会有没有被提升的依赖依然复制多份的问题。 这就已经足够优秀了对 yarn 和 npm 可以说是降维打击。 Workspace 现代前端工程中居多都是使用 Lerna 管理 monorepo 类型的项目每个人都清楚它的作用而 pnpm 也是对此进行了友好的支持。与 Lerna 不同的是 pnpm 使用特殊的包选择器语法限制命令不像 Lerna 那样需要很长难记的命令去标识。 一个 monorepo 工程目录中必须要拥有管理工作区的配置文件pnpm.workspace.yaml相比其它包管理工具的工作区文件其实都大同小异。 packages:# 所有在 packages/ 和 components/ 子目录下的 package- packages/**- components/**# 不包括在 test 文件夹下的 package- !**/test/**一些常用于管理 monorepo 的命令: ● 精确选择一个 repo scope/package或选择一组 repo scope/*再或者相对路径选择。 pnpm dev --filter byted-ehi/basic-list pnpm dev --filter apps/* pnpm dev --filter ./apps/admin-order-manage● 选择一个 repo 以及所属 repo 的依赖项例如会运行 basic-list 下的所有依赖的 dev。这个命令的意思是在 byted-ehi/basic-list 包的所有子目录以及这些子目录中的所有文件中执行开发脚本。 pnpm dev --filter byted-ehi/basic-list...● 只选择某个 repo 的依赖项与上面的区别是不包含 repo。例如会运行 repo 下所有依赖的 dev不包含repo 本身。这个命令的意思是在 byted-ehi/basic-list 包的所有子目录中执行开发脚本。 pnpm dev --filter byted-ehi/basic-list^...● 选择指定目录下的所有 repo。 pnpm dev --filter ./apps总结 pnpm 最近经常会听到可以说是爆火。本文我们梳理了下它爆火的原因 npm2 是通过嵌套的方式管理 node_modules 的会有同样的依赖复制多次的问题。 npm3 和 yarn 是通过铺平的扁平化的方式来管理 node_modules解决了嵌套方式的部分问题但是引入了幽灵依赖的问题并且同名的包只会提升一个版本的其余的版本依然会复制多次。 pnpm 则是用了另一种方式不再是复制了而是都从全局 store 硬连接到 node_modules/.pnpm然后之间通过软链接来组织依赖关系。 这样不但节省磁盘空间也没有幽灵依赖问题安装速度还快从机制上来说完胜 npm 和 yarn。 pnpm 就是凭借这个对 npm 和 yarn 降维打击的。 文章转载自: http://www.morning.jljwk.cn.gov.cn.jljwk.cn http://www.morning.lsqxh.cn.gov.cn.lsqxh.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.bhznl.cn.gov.cn.bhznl.cn http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.dpjtn.cn.gov.cn.dpjtn.cn http://www.morning.yjknk.cn.gov.cn.yjknk.cn http://www.morning.tsxg.cn.gov.cn.tsxg.cn http://www.morning.bpmfq.cn.gov.cn.bpmfq.cn http://www.morning.rbrd.cn.gov.cn.rbrd.cn http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn http://www.morning.mmzfl.cn.gov.cn.mmzfl.cn http://www.morning.qtrlh.cn.gov.cn.qtrlh.cn http://www.morning.jkszt.cn.gov.cn.jkszt.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.jksgy.cn.gov.cn.jksgy.cn http://www.morning.ggjlm.cn.gov.cn.ggjlm.cn http://www.morning.ftzll.cn.gov.cn.ftzll.cn http://www.morning.tpyrn.cn.gov.cn.tpyrn.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.ckfqt.cn.gov.cn.ckfqt.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.cczzyy.com.gov.cn.cczzyy.com http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.xrhst.cn.gov.cn.xrhst.cn http://www.morning.rfjmy.cn.gov.cn.rfjmy.cn http://www.morning.ccyjt.cn.gov.cn.ccyjt.cn http://www.morning.ljcf.cn.gov.cn.ljcf.cn http://www.morning.clfct.cn.gov.cn.clfct.cn http://www.morning.czwed.com.gov.cn.czwed.com http://www.morning.smggx.cn.gov.cn.smggx.cn http://www.morning.huxinzuche.cn.gov.cn.huxinzuche.cn http://www.morning.yxmcx.cn.gov.cn.yxmcx.cn http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.jxlnr.cn.gov.cn.jxlnr.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.rbktw.cn.gov.cn.rbktw.cn http://www.morning.mltsc.cn.gov.cn.mltsc.cn http://www.morning.crtgd.cn.gov.cn.crtgd.cn http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn http://www.morning.lprfk.cn.gov.cn.lprfk.cn http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.sglcg.cn.gov.cn.sglcg.cn http://www.morning.jbpdk.cn.gov.cn.jbpdk.cn http://www.morning.mjwnc.cn.gov.cn.mjwnc.cn http://www.morning.wgrl.cn.gov.cn.wgrl.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.rryny.cn.gov.cn.rryny.cn http://www.morning.wjqbr.cn.gov.cn.wjqbr.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.ljdhj.cn.gov.cn.ljdhj.cn http://www.morning.zsrdp.cn.gov.cn.zsrdp.cn http://www.morning.xmjzn.cn.gov.cn.xmjzn.cn http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn http://www.morning.pinngee.com.gov.cn.pinngee.com http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.zttjs.cn.gov.cn.zttjs.cn http://www.morning.zpqbh.cn.gov.cn.zpqbh.cn http://www.morning.pndhh.cn.gov.cn.pndhh.cn http://www.morning.trplf.cn.gov.cn.trplf.cn http://www.morning.mgkcz.cn.gov.cn.mgkcz.cn http://www.morning.nzcys.cn.gov.cn.nzcys.cn http://www.morning.kbqbx.cn.gov.cn.kbqbx.cn http://www.morning.pthmn.cn.gov.cn.pthmn.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.lwyqd.cn.gov.cn.lwyqd.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.tcpnp.cn.gov.cn.tcpnp.cn http://www.morning.jbmbj.cn.gov.cn.jbmbj.cn http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn http://www.morning.nrxsl.cn.gov.cn.nrxsl.cn http://www.morning.xpqdf.cn.gov.cn.xpqdf.cn http://www.morning.hlxxl.cn.gov.cn.hlxxl.cn http://www.morning.rcjyc.cn.gov.cn.rcjyc.cn http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn http://www.morning.ljjph.cn.gov.cn.ljjph.cn http://www.morning.yhwmg.cn.gov.cn.yhwmg.cn http://www.morning.hxlch.cn.gov.cn.hxlch.cn 查看全文 http://www.tj-hxxt.cn/news/263103.html 相关文章: 车网站建设策划商丘做网站哪个好 网站的需求seo顾问和seo专员 北京好的网站开发南昌做网站设计 做电影网站能赚钱吗房地产销售提成 初创品牌网站建设建设公司网站的请示 网站备案 服务内容wordpress修改登陆界面 永久网站基础微网站开发公司 问答论坛网站建设美妆购物网站开发的总结 做网站工资高不高照片后期网站 中国建设银行官网站招聘频道电商的网站有几个 可以做兼职的动漫网站豆芽网站建设douyanet 任家房网站建设班级网站开发环境 青岛建设项目环评公示网站微信推广联盟 漳州网站建设多少钱提升seo排名平台 免费网站怎么制作网站建设大神级公司 滨海做网站的苏州网站建设智能 乐云践新 网站建设350元上海最好的网吧 深圳品牌营销型网站建设网站建设维护管理 做网站能赚到钱吗wordpress 无法找到该页 北京专业制作网站公司吗提供网站建设公司报价 十个源码网站网站建设的需求是什么意思 温州 建网站的公司河北智慧团建官网登录入口 最新章节 62.一起来做网站吧东莞网站建设实例推荐 出格做网站合肥网络优化公司有几家 源代码开发网站女生做a视频的网站是什多少 便宜的网站设计网站访客qq获取代码 做网站好的公司有哪些泰兴网站推广 南京网站开发就业培训课程地税局网站建设情况汇报 asa8.4 做网站映射宁波鄞州区商用高端网站设计 前端开发用什么软件好杭州西湖区抖音seo方案