当前位置: 首页 > news >正文

npm、yarn、pnpm小节

Npm

  • 嵌套依赖: 老版本npm@3之前由于依赖嵌套下载,所以存在重复下载包导致体积过大以及嵌套路径字符过长的问题,后通过类似yarn扁平化提升依赖,将node_modules所有包放在同一层级解决(对于同一个包的不同版本,只会提升一个版本包(根据package.json中的引入先后位置),其他的仍然在嵌套的node_modules下),这样又引入了一个问题? 不同引入先后位置导致扁平化结果的不确定性,所以有了yarn.lock\package.lock来固定依赖版本,但是仍然存在不同版本的包。

Yarn:

● 扁平化处理 - npm@3

  • 幽灵依赖: 很容易出现包管理问题。由于扁平化处理,会将依赖提升到同一级,即子依赖包也会提升到项目的node_modules下,就出现了在项目的package.json没有引入该依赖,但是能在项目中引入该包。比如项目依赖A,而A依赖B,扁平化处理之后A、B都在node_modules下,所以在项目中就能直接使用B,即使没有在package中引入。如果在项目中使用了B,后续又去掉了A就导致无法找到B而报错。

● 离线缓存
● 并行下载依赖包,比npm快

Pnpm

主要是将所有依赖下载到pnpm-store中心仓库,然后在node_modules下创建一个pnpm的文件夹利用软硬连接来将项目中的依赖连接到中心仓库的依赖包,以此来复用,避免重新下载包,减少了磁盘空间

题外话

npm run xxx 或者 npx xxx其实都是使用node执行的node_modules下.bin文件夹下的可执行文件,手动通过node ./node_modules/.bin/xxx 也可以启动,项目目录中node_modules没有就会去全局的node目录的node_modules下查找,没有则报错command is not found。 【npm run xxx之后发送了什么?】

ps: 常说的npm全局安装依赖和局部安装,如果-g就是全局安装,即安装在node的目录的node_modules下(mac: 默认路径是 /usr/local/lib/node_modules,如果使用nvm来管理则在nvm目录中),局部安装就是在项目自身的node_modules下安装。

参考资料:
PNPM vs NPM vs YARN

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • css三点闪烁(可用于加载样式、标题等)
  • AWS EC2安全组配置:轻松开放端口访问
  • DataX导入或导出hive数据
  • 小程序使用iconfont字体图标
  • 注册安全分析报告:央视网
  • 【系统架构设计师-2021年】综合知识-答案及详解
  • 蓝桥杯备赛day01:循环
  • UDP广播、 组播通信
  • c++ 156函数
  • 【web安全】SQL注入篇
  • 网安新声 | 智能家居时代,用户隐私谁来守护
  • ACW快凝科技:打造无漏坚固新纪元,环保高效封堵未来
  • CRM系统为贷款中介行业插上科技的翅膀
  • 数据赋能(195)——开发:数据应用——概述、关注焦点
  • 宏定义## 的使用
  • 【mysql】环境安装、服务启动、密码设置
  • 30秒的PHP代码片段(1)数组 - Array
  • Android 架构优化~MVP 架构改造
  • Android系统模拟器绘制实现概述
  • Angular Elements 及其运作原理
  • Angular 响应式表单 基础例子
  • bearychat的java client
  • C语言笔记(第一章:C语言编程)
  • EventListener原理
  • FastReport在线报表设计器工作原理
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Node项目之评分系统(二)- 数据库设计
  • React-Native - 收藏集 - 掘金
  • 测试开发系类之接口自动化测试
  • 产品三维模型在线预览
  • 从0到1:PostCSS 插件开发最佳实践
  • 漂亮刷新控件-iOS
  • 山寨一个 Promise
  • 时间复杂度与空间复杂度分析
  • k8s使用glusterfs实现动态持久化存储
  • Python 之网络式编程
  • python最赚钱的4个方向,你最心动的是哪个?
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • #etcd#安装时出错
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)SpringCloud 整合Python
  • (2015)JS ES6 必知的十个 特性
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Java入门)学生管理系统
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转) Android中ViewStub组件使用
  • (转)visual stdio 书签功能介绍
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...