工作区
工作区是单体仓库的构建块。您添加到单体仓库的每个应用程序和包都将 **位于其自己的工作区内**。
工作区由您的 包管理器 管理,因此请确保您已先设置好它。
配置工作区
要使用工作区,您必须首先将它们的文件系统位置声明给您的包管理器。
我们推荐的常见约定是在顶层使用 apps/
和 packages/
目录。这不是必需的 - 只是一个建议的目录结构。
apps
文件夹应包含可启动应用程序的工作区,例如 Next.js (在新标签页打开) 或 Svelte (在新标签页打开) 应用程序。
packages
文件夹应包含由应用程序或其他包使用的包的工作区。
将您要配置为工作区的文件夹添加到根 package.json
文件中的 workspaces
字段。此字段包含以 glob 形式表示的工作区文件夹列表
{
"name": "my-monorepo",
"version": "1.0.0",
"workspaces": [
"docs",
"apps/*",
"packages/*"
]
}
my-monorepo
├─ docs
├─ apps
│ ├─ api
│ └─ mobile
├─ packages
│ ├─ tsconfig
│ └─ shared-utils
└─ sdk
在上面的示例中,my-monorepo/apps/
和 my-monorepo/packages/
内的所有目录都是工作区,my-monorepo/docs
目录本身也是一个工作区。 my-monorepo/sdk/
不是工作区,因为它未包含在工作区配置中。
命名工作区
每个工作区都有一个唯一的名称,该名称在其 package.json
中指定
{
"name": "shared-utils"
}
此名称用于
您可以使用 npm 组织或用户范围来避免与 npm 上的现有包发生冲突。例如,您可以使用 @mycompany/shared-utils
。
相互依赖的工作区
要在另一个工作区内使用工作区,您需要将其指定为依赖项,使用其名称。
例如,如果我们希望 apps/docs
导入 packages/shared-utils
,我们需要在 apps/docs/package.json
中添加 shared-utils
作为依赖项
{
"dependencies": {
"shared-utils": "*"
}
}
使用 *
可以让我们引用依赖项的最新版本。这样可以避免在包版本发生变化时需要手动更新依赖项版本。
就像普通的包一样,我们需要从根目录运行 install
命令。安装完成后,我们可以像使用其他包一样从 node_modules
中使用工作区。更多信息请查看我们的 代码共享部分。
管理工作区
在单仓库中,当您从根目录运行 install
命令时,会发生以下几件事:
- 检查您已安装的工作区依赖项。
- 所有工作区都将被 符号链接 (在新标签页中打开) 到
node_modules
中,这意味着您可以像使用普通包一样导入它们。 - 其他包将被下载并安装到
node_modules
中。
这意味着,无论何时添加/删除工作区,或更改它们在文件系统中的位置,您都需要从根目录重新运行 install
命令来重新设置工作区。
您不需要在每次源代码更改时都重新安装 - 只有当您以某种方式更改工作区的位置(或配置)时才需要重新安装。
如果您遇到问题,您可能需要删除存储库中的每个 node_modules
文件夹,然后重新运行 install
命令来进行修复。