umi-library
Version:
Library toolkit based on rollup and docz.
118 lines (103 loc) • 2.65 kB
JavaScript
const { existsSync } = require('fs');
const { join } = require('path');
const yParser = require('yargs-parser');
const chalk = require('chalk');
const assert = require('assert');
const signale = require('signale');
// print version and @local
const args = yParser(process.argv.slice(2));
if (args.v || args.version) {
console.log(require('../package').version);
if (existsSync(join(__dirname, '../.local'))) {
console.log(chalk.cyan('@local'));
}
process.exit(0);
}
// Notify update when process exits
const updater = require('update-notifier');
const pkg = require('../package.json');
updater({ pkg }).notify({ defer: true });
const cwd = process.cwd();
async function doc(args) {
const cmd = args._[1];
assert.ok(
['build', 'dev', 'deploy'].includes(cmd),
`Invalid subCommand ${cmd}`,
);
switch (cmd) {
case 'build':
case 'dev':
return await require('../lib/doc')
.devOrBuild({
cwd,
cmd: args._[1],
// extra args to docz
params: process.argv.slice(4),
});
case 'deploy':
return await require('../lib/doc')
.deploy({
cwd,
args,
});
}
}
switch (args._[0]) {
case 'build':
build();
break;
case 'doc':
doc(args).catch(e => {
signale.error(e);
process.exit(1);
});
break;
case 'help':
case undefined:
printHelp();
break;
default:
console.error(chalk.red(`Unsupported command ${args._[0]}`));
process.exit(1);
}
function stripEmptyKeys(obj) {
Object.keys(obj).forEach((key) => {
if (!obj[key] || (Array.isArray(obj[key]) && !obj[key].length)) {
delete obj[key];
}
});
return obj;
}
function build() {
// Parse buildArgs from cli
const buildArgs = stripEmptyKeys({
esm: args.esm && { type: args.esm === true ? 'rollup' : args.esm },
cjs: args.cjs && { type: args.cjs === true ? 'rollup' : args.cjs },
umd: args.umd && { name: args.umd === true ? undefined : args.umd },
file: args.file,
target: args.target,
entry: args._.slice(1),
});
if (buildArgs.file && buildArgs.entry && buildArgs.entry.length > 1) {
signale.error(new Error(
`Cannot specify file when have multiple entries (${buildArgs.entry.join(', ')})`
));
process.exit(1);
}
require('../lib/build').default({
cwd,
watch: args.w || args.watch,
buildArgs,
}).catch(e => {
signale.error(e);
process.exit(1);
});
}
function printHelp() {
console.log(`
Usage: umi-library <command> [options]
Commands:
${chalk.green('build')} build library
`);
}