opt-cli
Execute CLI Statements based upon opt-in / out-out Rules.
Installation
Simply install locally as a development dependency to your project's package:
npm install --save-dev opt-cli
Intended usage
Opting in/out of a configured tasks, best use case is for ghooks.
This discussion is the main motivation behind this module.
You can check out the eslint-find-new-rules/package.json for reference.
opt --in
"config": {
"ghooks": {
"pre-commit": "opt --in pre-commit --exec 'npm run validate'"
}
},
While commit
ing, npm run validate
will not be executed by default.
However, one can opt in by creating a .opt-in
file in the root of the project, with the content pre-commit
.opt-in
Each line in the .opt-in
file, is the keyword used after the opt --in
rule.
So for the above example, it's pre-commit
cat .opt-in
# "ghooks": {
# "pre-commit": "opt --in pre-commit --exec 'npm run validate'"
# }
pre-commit # the keyword used after the opt --in command
opt --out
opt --out
works exactly, the opposite way of opt --in
.
"config": {
"ghooks": {
"pre-commit": "opt --out pre-commit --exec 'npm run validate'"
}
},
In this case, npm run validate
will be executed before any changes can be commit
ed.
In order to opt out, you have to create a .opt-out
file in the root of the project, with the content pre-commit
.opt-out
Similar to .opt-in
file, each line in .opt-out
file, is the keyword used after the opt --out
rule.
So for the above example, it's pre-commit
cat .opt-out
# "ghooks": {
# "pre-commit": "opt --out pre-commit --exec 'npm run validate'"
# }
pre-commit # the keyword used after the opt --out command
- don't forget to update
.gitignore
to ignore this file. opt-in
, opt-out
files can contain multiple rules- every line must contain only a single rule.
#
can be used to comment any rule.
Use As Library
You may also include opt-cli as a library:
var opt = require( 'opt-cli' );
Given the example setup from above, usage would be as follows:
opt.testOptIn( 'pre-commit' ) === true
opt.testOptOut( 'pre-push' ) === true
Using opt.getExplicitOpts()
you would receive:
{
'pre-commit': true,
'pre-push': false
}
Advanced Usage
Rules to opt-into or opt-out of can also be specified using ...
- ... an
in
or out
array of a package.json
's config.opt
field:
"config": {
"opt": {
"in": [ "pre-commit" ],
"out": [ "pre-push" ]
}
},
- ... the environment variables
OPT_IN
and OPT_OUT
:
# Delimit multiple rules with ":" on *nix / ";" on Win
export OPT_IN="pre-commit"
export OPT_OUT="pre-push"
Contributors
This project follows the all-contributors specification (emoji key).
Contributions of any kind welcome!
Special thanks to @kentcdodds for encouraging to engage in oss, for the wonderful resources (check out the Egghead videos!) and — together with gtramontina — for coming up with the original idea to this module!