verdaccio/README.md

63 lines
3.5 KiB
Markdown
Raw Normal View History

2013-09-28 17:17:15 +02:00
Sinopia is a private/caching npm repository server.
It allows you to have a local npm registry with zero configuration. You don't have to install and replicate an entire CouchDB database. Sinopia keeps its own small database and, if a package doesn't exist there, it asks npmjs.org for it keeping only those packages you use.
## Use cases
1. Use private packages. If you want to use all benefits of npm package system in your company without sending all code to the public.
2. Cache npmjs.org registry. If you have more than one server you want to install packages on, you might want to use this to decrease latency (presumably "slow" npmjs.org will be connected to only once per package/version) and provide limited failover (if npmjs.org is down, we might still find something useful in the cache).
3. Override public packages. If you want to use a modified version of some 3rd-party package (for example, you found a bug, but maintainer didn't accepted pull request yet), you can publish your version locally under the same name.
2013-05-22 14:47:45 +02:00
2013-06-09 12:22:41 +02:00
## Installation
```bash
2013-09-28 17:17:15 +02:00
# installation and starting (application will create default
# config in config.yaml you can edit later)
2013-06-09 12:22:41 +02:00
$ npm install -g sinopia
$ sinopia
# npm configuration
2013-09-28 17:17:15 +02:00
$ npm set registry http://localhost:4873/
2013-06-09 12:22:41 +02:00
2013-09-28 17:17:15 +02:00
# if you have any restricted packages, you should add this:
2013-06-09 12:22:41 +02:00
$ npm set always-auth true
2013-09-28 17:17:15 +02:00
# if you use HTTPS, add an appropriate CA information
# ("null" means get CA list from OS)
2013-06-09 12:22:41 +02:00
$ npm set ca null
```
2013-05-22 08:48:04 +02:00
2013-05-22 09:46:36 +02:00
## Configuration
2013-05-22 08:48:04 +02:00
2013-09-28 17:17:15 +02:00
When you start a server, it auto-creates a config file that adds one user (password is printed to stdout only once).
2013-05-22 08:48:04 +02:00
2013-09-28 17:22:05 +02:00
## Using public packages from npmjs.org
2013-05-22 08:48:04 +02:00
2013-09-28 17:22:05 +02:00
If some package doesn't exist in the storage, server will try to fetch it from npmjs.org. If npmjs.org is down, it serves packages from cache pretending that no other packages exist. Sinopia will download only what's needed (= requested by clients), and this information will be cached, so if client will ask the same thing second time, it can be served without asking npmjs.org for it.
2013-05-22 08:48:04 +02:00
Example: if you successfully request express@3.0.1 from this server once, you'll able to do that again (with all it's dependencies) anytime even if npmjs.org is down. But say express@3.0.0 will not be downloaded until it's actually needed by somebody. And if npmjs.org is offline, this server would say that only express@3.0.1 (= only what's in the cache) is published, but nothing else.
2013-05-22 09:46:36 +02:00
## Features
2013-05-22 08:48:04 +02:00
2013-09-28 17:17:15 +02:00
For now you can publish packages and read them. Advanced features like `npm search` don't work yet.
2013-05-22 08:48:04 +02:00
2013-05-22 09:46:36 +02:00
## Storage
2013-05-22 08:48:04 +02:00
2013-09-28 17:17:15 +02:00
No CouchDB here. This application is supposed to work with zero configuration, so filesystem is used as a storage.
2013-05-22 08:48:04 +02:00
2013-09-28 17:17:15 +02:00
If you want to use a database instead, ask for it, we'll come up with some kind of a plugin system.
2013-05-22 08:48:04 +02:00
2013-09-28 17:17:15 +02:00
## Simular existing things
2013-05-22 08:48:04 +02:00
- npm + git (I mean, using git+ssh:// dependencies) - most people seem to use this, but it's a terrible idea... *npm update* doesn't work, can't use git subdirectories this way, etc.
2013-05-25 17:33:54 +02:00
- [reggie](https://github.com/mbrevoort/node-reggie) - this looks very interesting indeed... I might borrow some code there.
- [shadow-npm](https://github.com/dominictarr/shadow-npm), [public service](http://shadow-npm.net/) - it uses the same code as npmjs.org + service is dead
- [gemfury](http://www.gemfury.com/l/npm-registry) and others - those are closed-source cloud services, and I'm not in a mood to trust my private code to somebody (security through obscurity yeah!)
2013-05-22 08:48:04 +02:00
- npm-registry-proxy, npm-delegate, npm-proxy - those are just proxies...
2013-09-28 17:17:15 +02:00
- Is there something else?
2013-05-22 08:48:04 +02:00