敲黑板!!!pnpm && Monorepo
pnpm(performant npm) -- 后起之秀
传统管理工具的问题:
- 本地依赖无法共享,多个项目存在相同的依赖包。
官网简介:
前置概念(操作系统):
- 软硬链接1:
- 软硬链接2:
利用硬链接做了什么?
- 类似docker,将每一个包细化至文件,当一个包的版本有差异但文件可复用时,只新增差异的文件,且其余包也能复用别的包中的文件。
- 一个包只安装一次(安装至本地磁盘),当别的项目需要使用时用硬链接的方式复用即可。
利用软链接做了什么?
非扁平化的node_modules目录 & 幽灵依赖:
- 软链接指向硬链接,则当硬链接改变时,软链接失效,则不会触发幽灵依赖。
安装与使用
pnpm install => 安装所有依赖
pnpm add axios => 安装单个依赖
pnpm remove axios => 卸载单个依赖
pnpm <cmd> => 运行package.json中的脚本 (npm run dev)
pnpm store path => 查看本地全局硬链接存储目录
pnpm存储关系:
Monorepo(monolithic repository)
简介:
- 是管理项目代码的一种
思路/方式
,指在一个项目仓库 (repo) 中管理多个模块/包 (package),不同于常见的每个模块建一个repo
。 - 目前不少大型开源项目采用了这种方式,如
Babel、React、Vue
等。monorepo
管理代码只要搭建一套脚手架,就能管理(构建、测试、发布)多个package
。 - 在前端使用角度来看,
monorepo
就是把多个工程放到一个git
仓库中进行管理,因此他们可以共享同一套构建流程、代码规范也可以做到统一,特别是如果存在模块间的相互引用的情况,查看代码、修改bug、调试等会更加方便。 Monorepo
里面的每个功能模块,则是像我们玩的乐高积木一样,有标准的接口,即使从这个项目中拆离出去,也能使用。
优点:
- 代码复用非常简单(共用公共依赖)
- 简化依赖管理(同级目录方便相互引用)
- 原子提交能让重构全局特性更容易(一个git)
- 跨组合作更方便(各依赖间无逻辑关联性,只有引用关联)
vue3组件库的搭建模板
- 基于
pnpm
搭建的Monorepo
项目仓库。 - 搭建思路
- 初始化
pnpm init -y
- 配置公共目录(workspace)。
// pnpm-workspace.yaml packages: - play # 组件测试代码 - docs # 存放文档 - "packages/**" ```
- 新建npm配置文件
.npmrc
,配置幽灵依赖删除。// .npmrc // 幽灵依赖--将依赖A中的依赖同步到node_module下, // 避免以后依赖A中的依赖发生改变,导致无法察觉的bug shamefully-hoist = true
- 在公共目录下新增子仓库(packages下)
- 初始化子仓库,则子仓库们可共用相同的依赖,且有自己的依赖,且两两解耦。
- 初始化
- 具体架构:
Vue3设计及架构
- 具体架构:
传统管理工具(复习)
- npm
- cnpm
- yarn
简介:
node包管理工具,管理node中的第三方模块,在项目中也用来管理第三方依赖,(如:express、koa、axios...
)。
第三方模块
- 全局模块 :命令行中使用,所有文件路径都可以,如
cli、webpack
。 - 本地模块 :开发或者线上项目使用,如package.json中的依赖。
package.json :第三方依赖说明文件
- 初始化工作/生成该文件:
npm init -y
- 常见属性:
- dependencies :开发生产都需要的依赖
- devDependencies :开发时依赖,生产打包时不参与
- 了解属性:
package-lock.json :依赖锁文件
- 记录安装依赖项时的具体版本信息
^、~
、依赖包的依赖信息,安装依赖时保证版本相同。 - 记录缓存信息,若有缓存可减少安装时间。
- 属性说明:
- 可通过
npm config get cache
获取缓存文件路径- 再通过lock中的配置匹配,若匹配得到则直接解压后放入node_modules
- 若匹配不到,则下载并在缓存目录中新增文件,以备下次缓存
- 可通过
npm(node package manager)
-
内部概念:
- registry:
镜像源/仓库,用于统一存放npm包,下载、发布包时就是的仓库就是此处。
- registry:
-
关联概念
- nrm :node的下载源管理工具
- nvm :node的版本管理工具
-
命令
-
安装:
npm install
- 安装开发时依赖
npm i webpack --save-dev
=>npm i webpack -D
:开发时依赖,生产环境不依赖
- 安装开发时、生产时依赖
npm i jquery --save
=>npm i jquery
:开发、生产都依赖,打包时一起打入。
- 根据package.json安装依赖
npm i
- 原理图:
- 原理描述:
-
卸载:
npm uninstall -D
-
构建:
npm rebuild
-
清除缓存:
npm cache clean
-
-
第三方依赖版本信息
^1.0.2
=>^major.minor.patch
- major(破坏性更新).minor(增加功能,修订大版本中的功能).patch(修复bug)
- 符号 ^ ~ >= <=
^
限制大版本一致即可~
限制中间版本一致即可>=
<=
- 非稳定版本
- alpha预览版(内部测试的版本)
- beta(公测版)
- rc(最终测试版)
-
发布自己的npm包:
/**
*
* 发布自己的npm
* 1. npm init -y
* 2. 配置文件,配置入口文件,包名,版本等、
* 3. 登录npm npm adduser / npm login
* 3.1 username password email
* 4. npm publish .
* 5. 下载该npm包 npm i 包名
*
*/
/**
*
* package.json
{
"name": "test-push-npm",
"version": "2.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
// 搜索关键字
"keywords": [],
"author": "",
"license": "ISC"
}
*
*/
cnpm
- 目的:方便国内开发人员下载国外的依赖。
yarn
- 目的:弥补早期npm
<=5
的缺陷,如今的yarn与npm基本无差。
npx(了解)
- 目的:
- 补充说明:
开发脚手架(了解)
- commander
create from tj
- 可以使用commander包与命令行交互
npm i commander
- 如:解析传入的参数,各种脚手架都是使用这种包。
- 创建脚手架等。
- 可以使用commander包与命令行交互
转载自:https://juejin.cn/post/7239256600749129788