Linked Packages
Linked packages allow you to specify a group or groups of packages that should be versioned together. There are some complex cases, so some examples are shown below to demonstrate various cases.
- Linked packages will still only be bumped when there is a changeset for them (this can mean because you explicitly choose to add a changeset for it or because it's a dependent of something being released)
- Packages that have changesets and are in a set of linked packages will always be versioned to the highest current version in the set of linked packages + the highest bump type from changesets in the set of linked packages
Unlike
fixed packages
, there is no guarantee that all packages in the group of linked packages will be version-bumped and published, only those with changeset(s) will be.
Examples
General example
I have three packages, pkg-a
, pkg-b
and pkg-c
. pkg-a
and pkg-b
are linked but pkg-c
is not so the config looks like this.
{
"linked": [["pkg-a", "pkg-b"]]
}
pkg-a
is at1.0.0
pkg-b
is at1.0.0
pkg-c
is at1.0.0
I have a changeset with a patch for pkg-a
, minor for pkg-b
and major for pkg-c
and I do a release, the resulting versions will be:
pkg-a
is at1.1.0
pkg-b
is at1.1.0
pkg-c
is at2.0.0
I now have another changeset with a minor for pkg-a
and I do a release, the resulting versions will be:
pkg-a
is at1.2.0
pkg-b
is at1.1.0
pkg-c
is at2.0.0
I now have another changeset with a minor for pkg-b
and I do a release, the resulting versions will be:
pkg-a
is at1.2.0
pkg-b
is at1.3.0
pkg-c
is at2.0.0
I now have another changeset with patches for all three packages and I do a release, the resulting versions will be:
pkg-a
is at1.3.1
pkg-b
is at1.3.1
pkg-c
is at2.0.1
Example with dependants
I have two packages, pkg-a
, pkg-b
which are linked. pkg-a
has a dependency on pkg-b
.
{
"linked": [["pkg-a", "pkg-b"]]
}
pkg-a
is at1.0.0
pkg-b
is at1.0.0
I have a changeset with a major for pkg-b
and I do a release, the resulting versions will be:
pkg-a
is at2.0.0
pkg-b
is at2.0.0
I now have another changeset with a major for pkg-a
and I do a release, the resulting versions will be:
pkg-a
is at3.0.0
pkg-b
is at2.0.0
Using glob expressions
Sometimes you want to link many or all packages within your project (for example in a monorepo setup), in which case you would need to keep the list of linked packages up-to-date.
To make it simpler to maintain that list, you can provide glob expressions in the linked list that would match and resolve all the packages you wish to include.
For example:
{
"linked": [["pkg-*"]]
}
It will match all packages starting with pkg-
.
The glob expressions must be defined according to the micromatch (opens in a new tab) format.