主要分为两个部分, 首先,执行 npm/yarn install之后,包如何到达项目 node_modules 当中
。其次,node_modules 内部如何管理依赖
。
执行命令后,首先会构建依赖树,然后针对每个节点下的包,会经历下面四个步骤:
-
- 将依赖包的版本区间解析为某个具体的版本号
-
- 下载对应版本依赖的 tar 包到本地离线镜像
-
- 将依赖从离线镜像解压到本地缓存
-
- 将依赖从缓存拷贝到当前目录的 node_modules 目录
然后,对应的包就会到达项目的node_modules
当中。
将包本身
和依赖
放在同一个node_module
下面,与原生 Node 完全兼容,又能将 package 与相关的依赖很好地组织到一起
解决了依赖提升的安全问题,还大大优化了时间和空间上的性能
// 安装 axios
pnpm install axios
// 安装 axios 并将 axios 添加至 devDependencies
pnpm install axios -D
// 安装 axios 并将 axios 添加至 dependencies
pnpm install axios -S
当然,也可以通过 --filter 来指定 package。
根据指定的范围将包更新到最新版本,monorepo 项目中可以通过 --filter 来指定 package。
在 node_modules 和 package.json 中移除指定的依赖。monorepo 项目同上。举例如下:
// 移除 axios
pnpm uninstall axios --filter package-a
将本地项目连接到另一个项目。注意,使用的是硬链接,而不是软链接。如:
pnpm link ../../axios