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 react
pro1 就是
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 publish
yarn 发布的时候,如果会有本地有本地依赖如:
"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
不一样它可以配合依赖包工具来使用,来实现更强大的管理。