Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dominictarr/npmd
https://github.com/dominictarr/npmd
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/dominictarr/npmd
- Owner: dominictarr
- License: mit
- Created: 2013-04-15T20:07:54.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2015-03-10T20:31:06.000Z (almost 10 years ago)
- Last Synced: 2024-10-03T09:08:07.566Z (2 months ago)
- Language: JavaScript
- Size: 748 KB
- Stars: 450
- Watchers: 10
- Forks: 37
- Open Issues: 45
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - dominictarr/npmd - (others)
README
# npmd
distributed npm client.
[![build status](https://secure.travis-ci.org/dominictarr/npmd.svg)](http://travis-ci.org/dominictarr/npmd)
`npmd` is an alternative npm client that uses local replication and smart caching
improve performance by eliminating unnecessary network round-trips.
It is intended for use in the antipodes, via 3g, in airplanes, submarines, up trees, and in caves.
But it is still faster if you live in california too.## install
install carefully.
``` js
npm install npmd@1 -g --carefully
```## jokes
npmd may contain some jokes. If you do not have precious time
to waste with jokes, you may disable them by setting the
`npmd_jokes=0` enviroment variable, or passing `--no-jokes`
on the command line or setting `"jokes": false` in the `~/.npmd/config`
file. See [rc](https://github.com/dominictarr/rc) documentation for
how to pass any configuration setting.Note: disabling jokes also disables careful mode.
## npmd@1
I've recently rewritten the heart of npmd,
adding [npmd-cache](https://github.com/dominictarr/npmd-cache)
and changing how [npmd-resolve](https://github.com/dominictarr/npmd-resolve) and
[npmd-install](https://github.com/dominictarr/npmd-install) retrive modules.Syncing metadata was one of the best ideas in npmd@0, but also one of the most annoying.
Syncing is gone for now, but it will return soon as an option. npmd@1 is much more simple,
and, by using [Alan Gutierrez's](https://twitter.com/bigeasy) pure javascript database
[Locket](https://github.com/bigeasy/locket), npmd will not require a compiled node addon
and so will be easy to run even on windows. (this is still in development, so bear with us)### npmd-cache
npmd keeps a cache of modules you have installed, but it works different to npm's cache.
npm keeps a cache of modules at versions, see `~/.npm/{module}/{version}` and of npm docs
that npm has downloaded `~/.npm/{module}/.cache.json`. Unfortunately, this does not work well
offline, because it does not cache modules that were installed via `git` or `http` urls.
(any module with a largish dependency tree is likely to have at least one of these)npmd-cache works differently, it's cache is divided into two parts - the mutable side,
and the immutable side. The immutable side stores tarballs, and the mutable side stores module ids.
What is a module id? there are several ways to identify a module in npm. The best is
by it's name and version `{module}@{version}` but you can also install tarballs from
http or git urls (if they return something containing a package.json).There is no standard way to tell wether a url refers to an immutable resource.
That means that the next time you request that url it may be give a different response.
Even `{module}@{version}` is _nearly_ immutable, but not completely, because module versions can be deleted.However, code changes relatively slowly, and if you are working offline (freedom from distractions)
so npmd stores what tarball shasum a module id points to, so you can install that module again later.
Since the tarballs are identified by their shasum, so you can always grab an exact version.### npmd-resolve
`npmd` splits out resolving a dependency tree from installing a dependency tree, but in npm these two things
are tangled together. `npmd-resolve` takes a module id, or `{module}@{versionRange}` and builds a json
object that represents all the modules which should be installed, and the shasums they should have.The format of this object is compatible with the json generated by the `npm shrinkwrap` command,
which can be used to install exactly the same deps again.`npmd-resolve` in bundled inside `npmd`, but it can also be used as a standalone tool.
``` js
npm install npmd-resolve -gnpmd-resolve npmd > npmd.deps.json
```
this can then be fed into `npmd-install`### npmd-install
`npmd-install` takes a dependency tree with shasums and extracts them into a node_modules folder.
it is bundled inside `npmd` or can be installed as a standalone tool.``` js
npm install npmd-install -gnpmd-install < npmd.deps.json
```note, since `npmd-install` and `npmd-resolve` may both write to the mutable database inside `npmd-cache`,
you cannot run them both at the same time. If you want to feed the output of one into the other, you must do so via a file.``` js
npmd-resolve browserify > b; npmd-install < b; rm b
```This will get fixed at some point, but for now the simplest is just to use `npmd install browserify`
## help
display help files
```
npmd help $command
```## install
install a module. if the module's dependencies are in the cache,
then `npmd` will install without making a single network round trip!```
npmd install browserify --greedy
````--greedy` is optional, if enabled, the dependency tree is flattened as much as possible.
so you have less duplication.use `--global` to install a command globally.
## resolve
resolve all module versions required to install a given module.
will write json to stdout in the same format as npm-shrinkwrap.```
npmd resolve request
```## License
MIT