工作区(Workspace)
关于如何在工作空间环境中使用 Volta 的详细信息,其中在单个 repo 中有多个项目,并且它们都希望共享 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
json{ "volta": { "node": "12.16.1", "yarn": "1.22.4" } }
packages/cli/package.json
json{ "volta": { "extends": "../../package.json" } }
packages/utils/package.json
json{ "volta": { "extends": "../../package.json" } }
在工作区的任何地方运行 node
将会使用 Node 12.16.1
。如果你在根目录的 package.json
中更新了该版本,它将自动应用于所有项目,而无需在每个子项目中重复设置。
Pinning Tools
当你运行 volta pin
来选择工作区内的一个工具版本时,Volta 会将这些设置添加到最近的 package.json
中。 所以,在上面的例子中,如果你在 packages/utils
子项目中运行了 volta pin node@14
,新版本的 Node 将被写入到 packages/utils/package.json
, 并且仅适用于 utils
子项目,而不是其他任何项目。这样可以让你轻松地根据每个项目自定义工具版本。
如果您希望使用 volta pin
对根配置进行更改,请首先进入工作区根目录,然后从那里运行 volta pin
.
Hooks
如果您的项目使用项目 hooks,您可以将它们放置在子项目中的 .volta
目录中,或者根目录中的 .volta
目录中。 Volta 会在由 "extends"
键指向的每个位置查找钩子,以便可以根据需要自定义设置。
Project-local Binaries
除了在每个级别上寻找钩子(hook)之外,Volta 还会在每个级别上查找项目本地依赖项,以便在运行第三方工具时使用。 它将尝试在与 "extends"
引用的每个文件相关的 node_modules/.bin
目录中找到它。