# 工作区

URL: https://caijiao.org/volta/advanced/workspaces
Source: docs/volta/advanced/workspaces.md
Description: Volta 工作区配置指南及多项目共享设置方法

有关如何在工作区环境中使用 Volta 的详细信息，其中单个仓库中有多个项目，并且它们都希望共享 Volta 设置。

> 此功能是在 Volta 0.8.2 中添加的，在之前的版本中将无法使用。

## 扩展配置

在 `package.json` 的 `"volta"` 部分中，您可以指定一个键为 `"extends"` 的条目。该条目的值应该是另一个 JSON 文件的路径，该文件也有一个 `"volta"` 部分。相对路径将相对于设置它们的文件进行解析。任何 Volta 设置（例如 `"node"` 或 `"yarn"` 版本）将与 `"extends"` 指向的文件中的设置合并，优先级给予当前文件。因此，如果您希望所有项目都使用单个 Node 版本，您可以在根目录设置这些版本，然后每个项目只需要 `"extends": "../path/to/root/package.json"`。

### 示例

给定以下文件夹结构和 `package.json` 内容：

```
.
├── package.json
└── packages
    ├── cli
    │   └── package.json
    └── utils
        └── package.json
```

* `package.json`

    ```
    {
      "volta": {
        "node": "12.16.1",
        "yarn": "1.22.4"
      }
    }
    ```

* `packages/cli/package.json`

    ```
    {
      "volta": {
        "extends": "../../package.json"
      }
    }
    ```

* `packages/utils/package.json`

    ```
    {
      "volta": {
        "extends": "../../package.json"
      }
    }
    ```

在工作区的任何地方运行 `node` 都会使您使用 Node `12.16.1`。如果您在根 `package.json` 中更新该版本，它将自动用于所有项目，而无需在每个子项目中复制设置。

## 固定工具

当您在工作区内运行 `volta pin` 以选择工具的版本时，Volta 将始终将这些设置添加到它找到的_最近_的 `package.json` 中。因此，在上面的示例中，如果您在 `packages/utils` 子项目中运行 `volta pin node@14`，Node 的新版本将被写入 `packages/utils/package.json` 并_仅_适用于 `utils` 子项目，而不适用于任何其他子项目。这允许您轻松地在每个项目的基础上自定义工具版本。

如果您希望使用 `volta pin` 对根配置进行更改，请先 `cd` 到工作区根目录，然后从那里运行 `volta pin`。

## 钩子

如果您的项目使用[项目钩子](/volta/advanced/hooks)，您可以将它们放在子项目的 `.volta` 目录中，或者放在根目录的 `.volta` 目录中。Volta 将在每个由 `"extends"` 键指向的位置查找钩子，以便可以在任何需要的级别上自定义设置。

## 项目本地二进制文件

除了在每个级别查找钩子外，Volta 还将在每个级别检测项目本地依赖项，以便在运行第三方工具时使用。它将尝试在相对于每个由 `"extends"` 引用的文件的 `node_modules/.bin` 中找到它。
