a. 包管理工具为什么是 pnpm:
-
1.pnpm在安装依赖方面做了优化,通过hardlink机制,可以从不同的路径访问同一个文件---比如某一个依赖在node_moudules,目录以及全局 store 目录 1MB 的空间(加起来是 2MB),但因为 hard link 的机制使得两个目录下相同的 1MB 空间能从两个不同位置进行寻址,因此实际上这个 a 依赖只用占用 1MB 的空间,而不是 2MB,从而提升依赖管理性能。
-
能避免同一个依赖在不同项目中使用导致的重复下载---在使用 pnpm 对项目安装依赖的时候,如果某个依赖在 sotre 目录中存在了,就会直接从 store 目录里面去 hard-link,避免了二次安装带来时间消耗。
-
可以对于某些依赖不被使用的历史版本进行统一清理 b.lerna 是什么:
-
Lerna是优化多个包的代码库的管理工具,可以在一个主项目下管理多个子项目,从而解决多个包互相依赖,发布时需要手动维护多个包的问题
-
工作模式:1.independent,每次发布一个包的更新,对其他包不产生影响,可以指定主要更改、次要更改还是补丁等2.fixed,每次发布一个包的更新,所有包都重新发布
-
优点:
- 通过git 检测文件改动,自动发布
- 根据git 提交记录,自动生成CHANGELOG
- issue的集中管理,解决多包库的issue混乱痛点 c. Umi 仓库的形态 monorepo 是什么
monorepo对项目的管理相比于传统模式类似外卖和自助餐的关系(吃货理解)
传统:依赖与项目绑定,食物与顾客绑定。
monorepo:顾客按需选去食物,项目按需调用依赖
项目:每一个项目相当于一位顾客,有食物就是项目的依赖,传统模式下每份食物送到客户手中,每位客户独享一整份食物(依赖)。
常用依赖的作用:
husky:
git hook 保存在.git文件夹中,git多人协作工具在上传项目到远程仓库时不会把.git文件上传,要分享git hook文件就要使用husky.原理:在项目根目录中写一个配置文件,然后在安装 Husky的时候把配置文件和 Git Hook 关联起来,这样我们就能在团队中使用 Git Hook 了
jest:
Jest是 Facebook 的一套开源的 JavaScript 测试框架, 它自动集成了断言、JSDom、覆盖率报告等开发者所需要的所有测试工具,是一款几乎零配置的测试框架。并且它对同样是 Facebook 的开源前端框架 React 的测试十分友好。
prettier:(代码格式化)
tsc 编译 ts 代码为 js 代码
esno