Package Exports
- npm-migrate-all
- npm-migrate-all/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (npm-migrate-all) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
npm-migrate-all
Migrate all versions of given npm package to another registry.
Install
npm i npm-migrate-allUsage
import npmMigrateAll from 'npm-migrate-all'
const from = 'https://registry.npmjs.org/' // source registry url
const to = 'http://localhost:4873/' // target registry url
const pkgs = ['pkg1', '@my/pkg2', 'pkg3@0.1.0']
npmMigrateAll(from, to, pkgs).then(({
succeeded, // ['pkg1@0.0.1', 'pkg1@0.0.2']
failed,
skipped,
}) => {
// migrated
})Cli Usage
npx npm-migrate-all --from=https://registry.npmjs.org/ --to=http://localhost:4873/ pkg1 @my/pkg2 pkg3@0.1.0If you'd like to adjust concurreny limit, set environment variable NPM_MIGRATE_MAX_CONCURRENCY to the value as you wish.
NPM_MIGRATE_MAX_CONCURRENCY=100 npx npm-migrate-all --from=https://registry.npmjs.org/ --to=http://localhost:4873/ pkg1 @my/pkg2 pkg3@0.1.0Explain
npm-migrate-all calls npm cli tool behind the scenes, with a limited concurrency (default 20).
# 1. fetch metadata
npm show pkg # get package metadata and tarball url.
# 2. download tarball with axios.
# 3. update package.json if needed.
# 4. save tarball to hard disk
# 5. publish to new registry
npm publish <path-to-tarball>Known issues
npm-migrate-all will try its best to migrate the package as it is, means that packages' dist-tag and shasum will keep
unchanged in most cases. However, this is impossible when package's package.json file contains publishConfig.registry field.
{
"publishConfig": {
"registry": "https://registry.npmjs.org/"
}
}Npm doesn't allow command line parameters to override publishConfig in package.json, so there's no way to publish given package
without change its package.json file.
To fix this issue, npm-migrate-all open the tgz file in memory and update the content of package.json file. After this operation,
the tgz file's shasum will be changed.