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
reason
package then it will probably conflict withfacebook/reason
declaration (it's most likely others will depend on an already released version of reason instead).Thus we use
resolutions
so that constraint solver is forced to usefacebook/reason
declaration in every placereason
package 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 pin
workflow.
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.