implement options affecting resolved
value in lock files.
#4264
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements two options that affect t he
resolved
value in lock files described in npm/rfcs#486. There are more details in the RFC but the gist is that the lock file records information from the registry used when packages were added to the lock file. This can cause undesired behaviors including install failures when changing the configured registry.This is very much a work in progress and I'm eager for any feedback, especially the names of the options, alternate solutions to these problems, and how I've plumbed 'options' thru the Shrinkwrap class.
omit-lockfile-registry-resolved
This option omits the resolved value from the registry. On subsequent installs npm will resolve the tarball url from the registry. This supports any kind of registry, and guarantees the registry is the authority on the location of tarballs, but makes installs slower.
record-default-registry
This option uses the magic properties of the default registry
https://registry.npmjs.com
. When the lockfile is read npm replaces the default registry with the currently configured registry. This magic behavior allows users to switch from the default registry to a custom registry - but you can't switch from a custom registry to another registry once a custom registry is recorded in a lock file.This option does the opposite transform of the magic default, replacing the custom registry with the default registry when recording the lock file.
There were other proposals to record lock files with a sigil that explicitly means 'the current registry'
But this isn't cross compatible with other npm versions or clients. This option effectively uses
https://registry.npmjs.com
as that sigil, which is compatible with earlier versions of npm.The main downside with this option is that the lockfile records the path portion of the resolved url which can change between registries. This option only supports switching between registries that host tarballs at the same relative path. This downside is already present in npm's magic handling of the default registry.
The other downside is that it hangs more weight on the magic behavior of the default registry.
References
Related to npm/rfcs#486