Using Unreleased Packages
esy allows to use unreleased versions of packages hosted in their development repositories. This is useful as it allows to try new package versions before they are released.
With esy packages
To use an unreleased version of an esy package specify a dependency resolution
in resolutions field alongside the dependency declaration:
"dependencies": {
"reason": "*"
},
"resolutions": {
"reason": "facebook/reason#abcdef"
}
This will fetch reason package sources from facebook/reason GitHub
repository.
Why
resolutions?This is because in case any other package in the project's sandbox depends on
reasonpackage then it will probably conflict withfacebook/reasondeclaration (it's most likely others will depend on an already released version of reason instead).Thus we use
resolutionsso that constraint solver is forced to usefacebook/reasondeclaration in every placereasonpackage is required.
Other options are:
-
user/repo#<commit>will fetch sources from a GitHub's user/repo repository.The
<commit>is mandatory and should point to a specific commit (this will be lifted in the future).Examples:
facebook/reason#7ada18f
-
git://example.com/repo.git#<commit>will fetch sources from a specified git repository.
With opam packages
This corresponds to opam's
opam pinworkflow.
The same workflow is supported for opam packages.
One can use an unreleased opam package by specifying its development repository. The only difference is that one should also specify an opam package name.
Example:
"dependencies": {
"@opam/lwt": "*",
"@opam/lwt_ppx": "*"
},
"resolutions": {
"@opam/lwt": "ocsigen/lwt:lwt.opam#abc342",
}
Here we fetch @opam/lwt and @opam/lwt_ppx packages from the single
ocsigen/lwt GitHub repository but refer to different opam manifests lwt.opam
and lwt_ppx.opam to use corresponding packages.