1. Workspaces 介绍
Nodejs 的依赖包安装,几乎所有人都知道是执行 npm install 完了后,就会在目录下创建 node_modules 文件夹,然后所有的包都会放到这个目录下,但是如果我们多个工程都依赖同一个包的时候,就会导致,每个工程都要安装一次,浪费磁盘空间;比如如果我们是作为前端开发,经常使用 Vue 开发工程,然后我们的工程使用的是 vitejs 作为构建工具,如果我们有2个工程,我们的磁盘上就会安装 vitejs 和 vue 及其依赖两次。
为了解决这样的情况,yarn 和 pnpm 出了工作区(Workspaces)模式,就是将依赖集中安装在一个位置,相同的依赖也只会安装一次。同时 npm 从 7.0 开始,也开始支持 Workspaces 模式了。
关于工作区的介绍请参考:Workspaces
2. Workspaces 使用
下面介绍 Workspaces 基本使用:
- 首先新建一个目录
需要新建一个目录作为 Workspaces 根目录,例如:vite-pros
- 新建
package.json文件
在目录下新建一个 package.json 文件,内容填充如下:
{
"name": "vite-pros",
"description": "使用 vite 作为构建工具的前端项目",
"private": true,
"workspaces": [
"packages/*"
]
}
其中 private: true 是必需的!工作区并不意味着要发布,所以增加了这个安全措施,以确保没有任何东西可以意外暴露它们。workspaces 字段是包含每个工作区的路径的数组。由于追踪每个路径可能很乏味,因此该字段也接受glob模式!
- 新建
packages目录 packages目录下就是我们的正常的工程了。
3. npm 和 yarn 的 Workspaces 命令介绍
安装依赖
[yarn|npm] install为某一个子项目安装依赖
// npm npm install vue -w pro1 // yarn yarn workspace pro1 add -D reactpro1 就是
packages目录下对应的pro1目录,并且pro1目录的package.json文件的name就是pro1:name: pro1。这里可以依赖同一个工作区下的其它工程,以
yarn为例,如果依赖同工作区下的其它工程,package.json的dependencies就会发生改变,例如:"ph-utils": "workspace:packages/utils"、"ph-terminal-spinner": "workspace:packages/terminal-spinner"这就表明依赖的是同一个工作区的其它工程。
这样的可能有人就会有疑问了,如果package.json改变了后,上传后会怎么样呢?这个就是下面的命令了。发布
// npm npm publish // yarn 发布的时候,会自动替换本地依赖的版本 yarn workspace pro1 npm publishyarn 发布的时候,如果会有本地有本地依赖如:
"ph-utils": "workspace:packages/utils"则会被替换为"ph-utils": "0.0.1"其中0.0.1就是本地ph-utils的版本。
关于更多的 yarn workspaces 的命令和介绍请参考:yarn workspace命令 、yarn workspace介绍
关于更多的 npm workspaces 的介绍:npm workspaces
其实关于 workspaces 还有两个工具可以用:pnpm workspaces 和 Lerna
pnpm 和 npm、yarn 一样都是依赖包管理工具,是作为 npm、yarn 的替代使用的。而
Lerna 不一样它可以配合依赖包工具来使用,来实现更强大的管理。