recursive-exec
Version:
Run a command on each file in a folder and its subfolders (CLI tool designed for use in npm package.json scripts)
48 lines (42 loc) • 1.56 kB
JavaScript
////////////////////
// recursive-exec //
// MIT License //
////////////////////
// Usage in package.json:
// "scripts": {
// "make-css": "recursive-exec src/web --ext=.less 'lessc {{file}} build/web/{{basename}}.css'",
// "minimize-css": "recursive-exec build/web --ext=.css 'csso {{file}} --output dist/{{filename}}'",
// "minimize-js": "recursive-exec build --ext=.js 'uglifyjs {{file}} --output dist/{{basename}}.min.js'"
// },
//
// Contributors to this project:
// $ cd recursive-exec
// $ npm install
// $ npm test
// $ node bin/cli.js spec/fixtures/source --ext=.js,.css 'npx glob {{file}}'
// Imports
import { cliArgvUtil } from 'cli-argv-util';
// Modules
import { recursiveExec } from '../dist/recursive-exec.js';
// Parameters and flags
const validFlags = ['echo', 'exclude', 'ext', 'note', 'quiet'];
const cli = cliArgvUtil.parse(validFlags);
const folder = cli.params[0];
const command = cli.params[1];
// Recursive Exec
const error =
cli.invalidFlag ? cli.invalidFlagMsg :
!folder ? 'Missing source folder.' :
!command ? 'Missing command to execute.' :
cli.paramCount > 2 ? 'Extraneous parameter: ' + cli.params[2] :
null;
if (error)
throw new Error('[recursive-exec] ' + error);
const options = {
echo: cli.flagOn.echo,
excludes: cli.flagMap.exclude?.split(',') ?? null,
quiet: cli.flagOn.quiet,
extensions: cli.flagMap.ext?.split(',') ?? null,
};
recursiveExec.find(folder, command, options);