Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/privatenumber/npm-multi-publish
Publish an npm package to multiple registries
https://github.com/privatenumber/npm-multi-publish
artifactory cli lerna multiple npm publish registries semantic-release
Last synced: 9 days ago
JSON representation
Publish an npm package to multiple registries
- Host: GitHub
- URL: https://github.com/privatenumber/npm-multi-publish
- Owner: privatenumber
- License: mit
- Created: 2019-07-27T00:20:45.000Z (over 5 years ago)
- Default Branch: develop
- Last Pushed: 2022-10-07T05:29:30.000Z (about 2 years ago)
- Last Synced: 2024-10-19T01:11:40.414Z (18 days ago)
- Topics: artifactory, cli, lerna, multiple, npm, publish, registries, semantic-release
- Language: JavaScript
- Homepage:
- Size: 130 KB
- Stars: 24
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
> ⚠️ **DEPRECATED**
>
> This project does not work expectedly with npm v6, and is no longer maintained.
> Instead, I recommend using [npm-registry-sync](https://github.com/privatenumber/npm-registry-sync) to keep two registries in sync.# npm-multi-publish [![Latest version](https://badgen.net/npm/v/npm-multi-publish)](https://npm.im/npm-multi-publish) [![Monthly downloads](https://badgen.net/npm/dm/npm-multi-publish)](https://npm.im/npm-multi-publish) [![Install size](https://packagephobia.now.sh/badge?p=npm-multi-publish)](https://packagephobia.now.sh/result?p=npm-multi-publish)
Publish an npm package to multiple registries
### Features
- **🙌 Streamlined** Publishes to all registries in one `npm publish`!
- **🔥 High compatibility** Works with anything that uses `npm publish` (eg. monorepo)!
- **⚡️ Easy setup** Just add it to your npm publish hooks!
- **🛡 VPN conscious** Waits for you to switch VPNs if registry is unreachable!Support this project by ⭐️ starring and sharing it. [Follow me](https://github.com/privatenumber) to see what other cool projects I'm working on! ❤️
## 🚀 Install
```sh
npm i -D npm-multi-publish
```## 🚦 Quick Setup
1. Open `package.json`
2. Add `npm-multi-publish` to the `prepublishOnly` and `postpublish` hooks
3. Convert `publishConfig` into an array of configs```diff
{
...,"scripts": {
+ "prepublishOnly": "npm-multi-publish",
+ "postpublish": "npm-multi-publish"
},"publishConfig": [
+ {
+ "registry": "Registry URL 1"
+ },
+ {
+ "registry": "Registry URL 2"
+ },
+ ...
],...
}
```If using [Lerna](https://lerna.js.org/), add this configuration to the respective `package.json` of each package in the monorepo (not necessary in the root `package.json`).
That's it! Next time you run `npm publish` or `yarn publish` it will automatically publish to all registries configured in your `package.json` `publishConfig` array.
If the registries require authentication, make sure you authenticate with them all using a single `.npmrc` file (toggling via [`npmrc`](https://www.npmjs.com/package/npmrc) will not work).
## 💁♀️ FAQ
### Is it possible to authenticate to multiple npm registries with one `.npmrc` file?
[Yes](https://docs.npmjs.com/logging-in-to-an-npm-enterprise-registry-from-the-command-line#logging-in-with-a-scope-configured-to-point-to-an-npm-enterprise-registry). This is actually the preferred way because `npm publish` loads the `.npmrc` file at the beginning, so toggling `.npmrc` files via [`npmrc`](https://www.npmjs.com/package/npmrc) during publish (even in npm-multi-publish) does not take effect.
To login to an enterprise/custom registry:
```sh
$ npm login --registry=https://registry.company-name.npme.io
```To verify authentication on a specific registry:
```sh
$ npm whoami --registry=https://registry.company-name.npme.io
```A `.npmrc` file authenticated with multiple registries should include something like this:
```
//registry-a-url/:_authToken=... # Registry A authentication token
//registry-b-url/:_authToken=... # Registry B authentication token
```If you have certs for the respective registries, you can [add multiple certs to your `.npmrc` file](https://docs.npmjs.com/misc/config#ca).
### How can I test publishing to a registry?
Use [`verdaccio`](https://github.com/verdaccio/verdaccio) to create a local mock npm registry.Install and start the verdaccio server:
```sh
$ npm i -g verdaccio
$ verdaccio # Start server
```In a separate terminal window, configure npm to use your verdaccio server. I recommend using [`npmrc`](https://www.npmjs.com/package/npmrc) to create a new npmrc for the "verdaccio" profile so your default npmrc isn't polluted and so you can switch to it easily in the future:
```sh
$ npmrc -c verdaccio # (Optional) Create a new .npmrc not to pollute existing ones
$ npm set registry http://localhost:4873 # Set default registry
$ npm adduser --registry http://localhost:4873 # Login to registry
```Now you can test publishing.
After your package is test-published to verdaccio, you can confirm the contents via their Web UI at http://localhost:4873 (or any other port it's listening on).