@enact/cli
Version:
Full-featured build environment tool for Enact applications.
69 lines (60 loc) • 2.17 kB
JavaScript
/* eslint no-console: off, no-undef: off */
/* eslint-env node, es6 */
const path = require('path');
const fs = require('fs-extra');
const minimist = require('minimist');
const packageRoot = require('@enact/dev-utils').packageRoot;
let chalk;
const ssTests = path.join('tests', 'screenshot');
const uiTests = path.join('tests', 'ui');
function displayHelp () {
let e = 'node ' + path.relative(process.cwd(), __filename);
if (require.main !== module) e = 'enact clean';
console.log(' Usage');
console.log(` ${e} [options] [paths...]`);
console.log();
console.log(' Arguments');
console.log(' paths Additional path(s) to delete');
console.log();
console.log(' Options');
console.log(' -a, --all Clean all temporary files');
console.log(' (includes node_modules)');
console.log(' -v, --version Display version information');
console.log(' -h, --help Display help information');
console.log();
process.exit(0);
}
function api ({paths = [], all = false} = {}) {
const known = ['build', 'dist'];
if (all) known.push('node_modules');
if (fs.existsSync('samples')) {
const sampleDirs = fs
.readdirSync('samples')
.map(p => path.join('samples', p))
.filter(p => fs.existsSync(path.join(p, 'package.json')));
sampleDirs.forEach(p => {
known.push(path.join(p, 'build'), path.join(p, 'dist'));
if (all) known.push(path.join(p, 'node_modules'));
});
}
if (fs.existsSync(ssTests)) known.push(path.join(ssTests, 'dist'));
if (fs.existsSync(uiTests)) known.push(path.join(uiTests, 'dist'));
return Promise.all(paths.concat(known).map(d => fs.remove(d)));
}
function cli (args) {
const opts = minimist(args, {
boolean: ['help', 'all'],
alias: {h: 'help', a: 'all'}
});
if (opts.help) displayHelp();
process.chdir(packageRoot().path);
import('chalk').then(({default: _chalk}) => {
chalk = _chalk;
api({paths: opts._, all: opts.all}).catch(err => {
console.error(chalk.red('ERROR: ') + 'Failed to clean project.\n' + err.message);
process.exit(1);
});
});
}
module.exports = {api, cli};
if (require.main === module) cli(process.argv.slice(2));