@gdjiami/cli
Version:
CLI for build front end project.
196 lines (195 loc) • 6.71 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
var yargs_1 = tslib_1.__importDefault(require("yargs"));
var path_1 = tslib_1.__importDefault(require("path"));
var utils_1 = require("./utils");
var middlewares_1 = tslib_1.__importDefault(require("./middlewares"));
process.on('uncaughtException', function (err) {
throw err;
});
var cwd = process.cwd();
var cmdDir = path_1.default.resolve(__dirname, '../');
var pkg = fs_extra_1.default.readJSONSync(path_1.default.join(cmdDir, 'package.json'));
var name = pkg.name;
var version = pkg.version;
var cmdName = Object.keys(pkg.bin)[0];
yargs_1.default
.scriptName(cmdName)
.command('create [name]', 'Create React project', {
force: { description: 'disable template cache', alias: 'f', type: 'boolean' },
at: { description: 'sepcify jm-cli version', alias: 'a', type: 'string', requiresArg: true },
template: { description: 'template name in npm, file:// or url', alias: 't', type: 'string', requiresArg: true },
}, middlewares_1.default(function (argv) {
require('./cmds/create').default(cwd, cmdDir, {
name: argv.name,
version: argv.at,
template: argv.template,
});
}))
.command(['start', '$0'], 'Start development server', {
entry: {
description: 'sepcify entry names to build. example: a,b',
alias: 'e',
type: 'string',
requiresArg: true,
coerce: utils_1.transformString2Array,
},
'auto-reload': {
description: 'auto reload electron main process',
type: 'boolean',
alias: 'a',
default: true,
},
'electron-inspect': {
description: 'activate inspector on host:port, default :5858',
type: 'string',
},
'electron-inspect-brk': {
description: 'activate inspector on host:port and break at start of user script, default :5858',
type: 'string',
},
}, middlewares_1.default(function (argv) {
require('./cmds/start').default(argv);
}))
.command('build', 'Build project for production', {
entry: {
description: 'sepcify entry names to build. example: a,b',
alias: 'e',
type: 'string',
requiresArg: true,
coerce: utils_1.transformString2Array,
},
'cache-by-npm-verison': {
description: 'cache build output by npm version',
type: 'boolean',
},
'dont-clean': {
description: "don't clean dist folder",
type: 'boolean',
},
'dont-copy': {
description: "don't copy files in `public`",
type: 'boolean',
},
group: {
desc: "sepcify entry group. It will override --entry. example --group.client=a,b --group.server=c,d",
type: 'string',
requiresArg: true,
coerce: utils_1.transformGroup,
},
measure: {
description: 'measures your webpack build speed',
alias: 'm',
type: 'boolean',
},
}, middlewares_1.default(function (argv) {
var _a = argv, entry = _a.entry, group = _a.group, other = tslib_1.__rest(_a, ["entry", "group"]);
if (group && group.default) {
entry = tslib_1.__spreadArrays((entry || []), group.default);
group = undefined;
}
require('./cmds/build').default(tslib_1.__assign({ entry: entry, group: group }, other));
}))
.command('analyze', 'Analyze webpack bundle', {
entry: {
description: 'sepcify entry names to build. example: a,b',
alias: 'e',
type: 'string',
requiresArg: true,
coerce: utils_1.transformString2Array,
},
group: {
desc: "sepcify entry group. It will override --entry. example --group.client=a,b --group.server=c,d",
type: 'string',
requiresArg: true,
coerce: utils_1.transformGroup,
},
}, middlewares_1.default(function (argv) {
require('./cmds/analyze').default(argv);
}))
.command('dll', 'generate or update Webpack Dll files', {}, middlewares_1.default(function (argv) {
require('./cmds/dll').default(argv);
}))
.command('serve', 'serve builded content', {
gzip: {
description: 'enable gzip',
alias: 'g',
type: 'boolean',
default: true,
},
cors: {
description: 'enable CORS via the `Access-Control-Allow-Origin` header',
type: 'boolean',
},
open: {
description: 'open browser window after starting the server',
alias: 'o',
type: 'boolean',
},
f: {
description: 'fall back to /index.html if nothing else matches',
alias: 'history-api-fallback',
type: 'boolean',
default: true,
},
}, middlewares_1.default(function (argv) {
require('./cmds/serve').default(argv);
}))
.command('polyfill', 'generate polyfill base on browserslist', {
out: {
alias: 'o',
type: 'string',
default: 'public/polyfill.js',
},
}, middlewares_1.default(function (argv) {
require('./cmds/polyfill').default(argv);
}))
.command('upgrade', "upgrade " + name + " in current project or global", {
'dry-run': {
alias: 'd',
type: 'boolean',
},
global: {
description: 'global upgrade',
alias: 'g',
type: 'boolean',
},
yarn: {
description: 'use yarn to upgrade. default is true if `yarn` command founded',
alias: 'y',
type: 'boolean',
},
// yargs 可以自动将yarn置为false
'no-yarn': {
description: 'no use yarn to upgrade.',
type: 'boolean',
},
level: {
description: "choose semver level. Global mode default is 'major', local mode default is 'minor'",
alias: 'l',
type: 'string',
choices: ['major', 'minor', 'patch'],
},
}, middlewares_1.default(function (argv) {
require('./cmds/upgrade').default(argv);
}))
.command('clean', 'clean cache', {}, middlewares_1.default(function (argv) {
require('./cmds/cleanCache').default();
}))
// .command('deploy', 'TODO', {}, wrap(argv => {}))
// .command('test', 'TODO', {}, wrap(argv => {}))
.command('version', 'show version', {}, function (argv) {
console.log(version);
})
.command('help', 'show helps', {}, function () {
yargs_1.default.showHelp();
})
.version(version)
.option('inspect', {
description: 'inspect webpack configuration',
type: 'boolean',
})
.strict()
.help().argv;