germs
an opinionated hack-space for building things fast without spending a bunch of time setting things up
Installation
Installing germs
as a dependency:
yarn install germs nps nps-utils -D
or npm i germs nps nps-utils -D
Installing nps
- a delightful build tool (optional but useful):
yarn install nps global
or npm i nps -g
Using germs
Create a new file package-scripts.js
, and place the following in it.
const germs = requⅰre("germs")
const {name} = requⅰre("package.json")
module.exports = germs(name)
Here is an example from germs
own specific package-script.js file.
Opinions
germs
relies on the following modules for a good build experience:
Build
-
nps
for build tasks
Compile
-
babel
for per-file conversion -
rollup
for bundled conversion
Test
-
jest
for testing -
execa
for testing CLI implementations -
dont-break
for downstream testing
Quality of Life for Developers
-
eslint
for static analysis rules (static analysis rules!) -
documentation
for automatic jsdoc > documentation generation -
madge
for dependencies and graphs -
depcheck
for (sometimes-unreliable) dependency checking -
updtr
for automatic package updates -
husky
for some commit conventions (use--no-verify
to skip)
Commands
-
nps dependencies.check
- check dependencies -
nps dependencies.graph
- generate a visual dependency graph -
nps dependencies.graphjson
- generate a visual dependency graph in json -
nps dependencies.graphdot
- generate a visual dependency graph in dot -
nps readme
- regenerate the readme -
nps lint
- lint both the js and the jsdoc -
nps lint.src
- lint js files -
nps lint.jsdoc
- lint jsdoc in files -
nps test
- run all tests with coverage -
nps test.unit
- run unit tests -
nps docs
- auto regen the docs -
nps bundle
- run the main bundle task -
nps build
- convert files individually -
nps care
- run all the things -
nps precommit
- nps care
Contributing
Contributions welcome!
germs
is opinionated, but your suggestions / contributions are welcome.
API
rollup
Parameters
-
custom
Object configuration-
custom.name
string name of project -
custom.alias
Object aliases to use in the project -
custom.external
Array an array of external dependencies -
custom.alterPlugins
Function an optional function which gets the plugins as input -
custom.customize
Function an optional function which allows you to alter all output
-
Examples
const pkg = require(`../package.json`)
const {rollup} = require(`../germs`)
const external = (
pkg && pkg.dependencies ? Object.keys(pkg.dependencies) : []
)
module.exports = rollup({
name: pkg.name,
alias: {
[`@tools`]: `./tools`
},
external
})
Returns Object config file for rollup
bundle
Parameters
-
custom
Object configuration-
custom.name
string name of project -
custom.alias
Object aliases to use in the project -
custom.external
Array an array of external dependencies -
custom.alterPlugins
Function an optional function which gets the plugins as input -
custom.customize
Function an optional function which allows you to alter all output -
custom.input
string an input file -
custom.output
Object an output object
-
Examples
const pkg = require(`../package.json`)
const {bundle} = require(`../germs`)
const external = (
pkg && pkg.dependencies ?
Object.keys(pkg.dependencies) :
[]
)
module.exports = bundle({
name: pkg.name,
alias: {
[`@tools`]: `./tools`
},
external,
input: `src/index.js`,
output: {
file: `./${pkg.name}.js`,
format: `cjs`
}
})
Returns Object config file for rollup