Rewrite URLs in npm-shrinkwrap.json or package-lock.json
Sometimes it's necessary to update the "resolved" URLs in an npm-shrinkwrap.json
file or a package-lock.json
file - for instance, when you want to point all packages to a private npm registry like npm Enterprise.
This package provides a tool to do just that. It comes with a convenient CLI, but it can be easily used as a module in some other grander logic as well.
Install as global (binary) module:
$ npm install -g rewrite-shrinkwrap-urls
View help content:
$ rewrite-shrinkwrap-urls --help
Usage: rewrite-shrinkwrap-urls [npm-shrinkwrap.json] -r <registry> [options]
Arguments:
[npm-shrinkwrap.json] The input shrinkwrap file containing urls to
rewrite. You can omit this if --stdin is used.
[file] [default: npm-shrinkwrap.json]
Required:
-r, --registry <registry> Base URL of the registry to point URLs at
[required] [string]
Options:
-f, --file <output> Path of file to write modified shrinkwrap to,
defaults to input file
[file]
-i, --stdin Read shrinkwrap file contents from stdin
[boolean]
-o, --stdout Write modified shrinkwrap content to stdout instead
of file
[boolean]
-p, --public Use public registry style URLs. Omit this flag when
rewriting to npm Enterprise.
[boolean]
-s, --spaces <num> Number of spaces per JSON indent of output
[number] [default: 2]
-m, --from Sync the "from" field with the "resolved" field
(both will be the rewritten URL)
[boolean]
-h, --help Show help
[commands: help] [boolean]
-v, --version Show version number
[commands: version] [boolean]
Rewrite all URLs in the current directory's npm-shrinkwrap.json
, pointing to the private registry at https://private-registry
:
$ rewrite-shrinkwrap-urls -r https://private-registry
The equivalent command for a package-lock.json
file would be:
$ rewrite-shrinkwrap-urls package-lock.json -r https://private-registry
Read npm-shrinkwrap-OLD.json
and write the modified content to npm-shrinkwrap-NEW.json
:
$ rewrite-shrinkwrap-urls npm-shrinkwrap-OLD.json -r https://private-registry -f npm-shrinkwrap-NEW.json
Read shrinkwrap file from stdin and output the modified content to stdout:
$ rewrite-shrinkwrap-urls -r localhost:8080 -i < npm-shrinkwrap.json
$ cat npm-shrinkwrap.json | rewrite-shrinkwrap-urls -r localhost:8080 -
Install to local node_modules
directory and add dependency to package.json
:
$ npm install --save rewrite-shrinkwrap-urls
Use the module to synchronously modify an object in-place:
// require the module
var rewriteShrinkwrapUrls = require('rewrite-shrinkwrap-urls')
// read shrinkwrap object into memory
var shrinkwrap = JSON.parse(require('fs').readFileSync('npm-shrinkwrap.json', { encoding: 'utf8' }))
// modify the shrinkwrap object synchronously
rewriteShrinkwrapUrls(shrinkwrap, { newBaseUrl: 'https://private-registry' })
// do something with shrinkwrap
console.log(shrinkwrap)
-
shrinkwrap
: objectContent from a shrinkwrap or package-lock file, as an object in memory.
-
opts
: objectOptions object.
-
newBaseUrl
: stringBase URL of new registry to point package URLs at. Default is
'http://localhost:8080'
. -
public
: booleanWhether to use public registry style URLs or not. A public registry tarball URL looks like
https://registry.npmjs.org/through/-/through-2.3.8.tgz
while a private registry tarball URL looks likehttp://localhost:8080/t/through/_attachments/through-2.3.8.tgz
. Default isfalse
(use private registry URL style). -
transformer
: functionA function that will be called for each modified URL, allowing any custom check or modification to be done. The default function simply returns the
newUrl
.Arguments:
newUrl
: stringoldUrl
: stringpackageName
: stringversion
: string
Returns the desired URL as a string
-
syncFrom
: booleanWhether to sync the
"from"
field with the"resolved"
field for each dependency in the shrinkwrap content. Syncing them means that both fields will updated/rewritten to the new URL.
ISC © Contributors