The lightweight library is used for Gulp application. It's useful when you want to enhance the Gulp CLI with your own parameters (option, sub option, argument).
The development is using:
- Plain JavaScript ES6
- No using other library
- Simplification , effect and performance
$ npm install gulp-command-handling
- The minimum support for:
- Enhancement for the Gulp CLI with your own parameters (option, sub option, argument).
- Using alias for option and sub option.
- Command combination for many times you need.
- Using custom regular expression (RegExp) for your reason when needed. (It applies for params validation)
Examples:
- $ gulp build -s -m FlowerSite (Simple using)
- $ gulp release --site --minify FlowerSite (Using alias)
- $ gulp release --site --minify FlowerSite --publish (No using the last argument)
- $ gulp build --site --minify FlowerSite --move-to "/home/dev" (Combination 2 times)
- $ gulp build -s -m -o FlowerSite -t "/home/dev" -n flowersite-v1.0.0 (Combination 3 times)
The simple command line structure is used in this library:
$ gulp <task> [-option] [-subOptions] [argument]
- An option has only an alias and it has many sub options.
- An alias is used as a key in the result object.
- An argument is the end of a part in the command.
BEWARE! You should not using the options that are already using for Gulp CLI. Example: -h
, -v
, -f
etc. Use the command gulp --help
to view more about that.
Method | Argument | Description |
---|---|---|
.setting() | Object | Custom definition (Ex: custom RegExp) |
.option() | <task> , <option> , <optionAlias> , [description] |
Option definition |
.subOption() | <task> , <optionAlias> , <subOption> , <subOptionAlias> , [description] |
Sub option definition |
.getOptions() | It returns an option list that is an object | |
.parse() | <process.argv> |
Parse the command line (Ex: process.argv.slice(2)) |
You can use method chaining with the following order:
Method | Order | Description |
---|---|---|
.setting() | First | The method must be in the first position of chaining |
.option() | Between | |
.subOption() | Between | |
.parse() | Last | The method must be in the last position of chaining |
Regular Express (RegExp) is used for data validation. You can redefine them for your reason when needed by using the method .setting()
. The general regexps are using if you don't use your own.
It just now supports regexps for option, alias and argument validation. You should only change values of the properties: regexOption
, regexAlias
and regexArgument
.
View the example for more detail.
View more in the example /gulpfile.js
on GitHub repo.
/* gulpfile.js */
const { Command } = require('gulp-command-handling');
const gulpCommand = new Command();
// Using custom RegExp when needed
const customSettings = {
regexOption: false, //Default is false
regexAlias: false,
regexArgument: [a-z]/i,
};
// Command definition
gulpCommand
.setting(customSettings)
.option('build', '-s', '--site', 'Building styling for a specific site')
.subOption('build', '--site', '-m', '--minify', 'Minify files in destination');
.subOption('build', '--site', '-o', '--overwrite', 'Overwrite files in destination')
// Using in a Gulp task
function build(cb) {
const result = gulpCommand.parse(process.argv.slice(2));
if (result.site) {
if (result.site.minify) {
console.log('Minification task -> Done!');
}
if (result.site.overwrite) {
console.log('Overwriting task -> Done!');
}
} else {
console.log('Nothing to do');
}
cb();
}
exports.build = build;
// Running the commands for testing purpose
$ gulp build -s -m -o FlowerSite
$ gulp build --site --minify --overwrite FlowerSite
Many thanks to Commander.js for the inspiration.