dry-dry
v0.4.0
Published
Use npm across multiple projects without repeating yourself
Downloads
1,091
Maintainers
Readme
DRY - Use npm across multiple projects without repeating yourself
Get it
$ npm i -g dry-dry
Use it
$ dry init
The copy/paste madness
Because companies and other groups have bunch of package.json
attributes that are the same across all npm projects.
Those attributes must be maintained using copy/paste across all projects.
This is wrong !
We believe that those attributes should be easily distributed and updated across projects.
The version management madness
Because most of multi module project use multiple version of the same dependencies. Bundling an application with those modules may be challenging.
Dry provide a mecanism to centralize dependencies version management.
Do not repeat yourself
dry
is a stupid npm
wrapper allowing any package.json
to extend a parent file.
The parent file can be located on the system or simply inside a published npm module.
How does it work
On each dry
command, dry
:
- creates a merged
package.json
based on the providedpackage-dry.json
- runs the
npm
command - applies the possible
package.json
modifications made bynpm
topackage-dry.json
- removes
package.json
package.json
is always removed to make sure that nobody will execute a pure npm
command in a dry
project.
Inheritance in action
Parent project
package-dry.json
{
"name": "parent",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"foo": "npm help"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencyManagement": {
"dependency-one": "1.0.0",
"dependency-two": "2.0.0",
"dev-dependency-one": "1.1.0",
"dev-dependency-two": "2.2.0"
}
}
Child project
package-dry.json
{
"name": "child",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dry": {
"extends": "parent/package-dry.json",
"dependencies": {
"parent": "1.0.0"
}
},
"dependencies": {
"dependency-one": "managed",
"dependency-three": "1.2.3"
},
"devDependencies": {
"dev-dependency-two": "managed",
"dev-dependency-three": "1.2.3"
}
}
Merged package.json
{
"name": "child",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"foo": "npm help"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"dependency-one": "1.0.0",
"dependency-three": "1.2.3"
},
"devDependencies": {
"dev-dependency-two": "1.1.0",
"dev-dependency-three": "1.2.3"
}
}
package-dry.json
To do that, dry
introduces a file named package-dry.json
.
package-dry.json
replaces package.json
in your dry projects.
Of course, it can contain all the attributes of package.json
with the addition of an attribute called dry
.
package-dry.json dry
attribute has 2 optional attributes:
extends
- The parent of the current dry packagedependencies
- The dependencies needed to resolve the file pointed byextends
. Those dependencies will not be saved to your project.
dry commands
dry
proxies all received arguments to npm
.
Just take your usual npm commands and replace the word npm
with dry
.
| npm | dry | | ----------- | ----------- | | npm init | dry init | | npm i | dry i | | npm install | dry install | | npm publish | dry publish | | npm x y z | dry x y z |
dry commands : additional parameters
The dry command accepts some additional parameters
--dry-keep-package-json' : when provided the generated package.json
file is not deleted
--dry-save-package-json-to' target_file_path
: when provided a copy of the generated package.json
file is done to target_file_path
location