Workspaces
Workspaces allow you to work with multiple pesde projects within a single repository. Packages within a workspace can depend on each other. And you can run commands like install or publish on every package in the workspace at once.
Let’s say you have a repository with the following structure:
- pesde.toml
Directorypkgs/
Directoryfoo/
- pesde.toml
- …
Directorybar/
- pesde.toml
- …
Within the root pesde.toml
file, we can define a workspace:
name = "acme/root"version = "0.0.0"private = true
workspace_members = ["pkgs/*"]
[target]environment = "luau"
Now, each folder within the pkgs/
directory is considered a package in the
workspace. You can run commands like pesde install
or pesde publish
from
the root of the repository to run them on every package in the workspace.
Workspace Dependencies
Packages within a workspace can depend on each other. For example, if foo
depends on bar
, you can add a dependency to bar
in the foo/pesde.toml
file:
name = "acme/foo"version = "1.0.0"
[dependencies]bar = { workspace = "acme/bar", version = "^" }
Workspace dependencies are replaced with normal pesde dependencies when publishing.
The version
field can either contain ^
, *
, =
, ~
, or a specific version
requirement, such as ^1.0.0
. If you use ^
, =
, or ~
, it will be replaced
with the version of the package in the workspace when publishing.
For example, if you had the following:
[dependencies]bar = { workspace = "acme/bar", version = "^" }qux = { workspace = "acme/qux", version = "=" }qar = { workspace = "acme/qar", version = "~" }zoo = { workspace = "acme/zoo", version = "^2.1.0" }baz = { workspace = "acme/baz", version = "*" }
If bar
, baz
, qux
, qar
, and zoo
are all at version 2.1.5
in the
workspace, the pesde.toml
file will be transformed into the following when
publishing.
[dependencies]bar = { name = "acme/bar", version = "^2.1.5" }qux = { name = "acme/qux", version = "=2.1.5" }qar = { name = "acme/qar", version = "~2.1.5" }zoo = { name = "acme/zoo", version = "^2.1.0" }baz = { name = "acme/baz", version = "*" }
A target
field can be added to the dependencies
table to specify a target
environment for the dependency.
[dependencies]bar = { workspace = "acme/bar", version = "^", target = "luau" }