@blueking/lesscode-cli
Version:
Command Tools for Lesscode
148 lines (117 loc) • 4.68 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _path = _interopRequireDefault(require("path"));
var _fs = require("fs");
var _chalk = _interopRequireDefault(require("chalk"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _webpack = _interopRequireDefault(require("webpack"));
var _webpackMerge = _interopRequireDefault(require("webpack-merge"));
var _archiver = _interopRequireDefault(require("archiver"));
var _webpackIife = _interopRequireDefault(require("./build/webpack.iife.config"));
var _webpackUmd = _interopRequireDefault(require("./build/webpack.umd.config"));
function validPath(directory, absolutePath, entryFile, configFile) {
if (!directory) {
console.log(_chalk.default.magentaBright('Please enter the directory of the custom component'));
process.exit(1);
}
if (!_fsExtra.default.pathExistsSync(absolutePath)) {
console.log(_chalk.default.magentaBright(`Directory '${directory}' is not exist`));
process.exit(1);
}
if (!_fsExtra.default.pathExistsSync(entryFile)) {
console.log(_chalk.default.magentaBright(`Entry File '${directory}/index.vue' is not exist`));
process.exit(1);
}
if (!_fsExtra.default.pathExistsSync(configFile)) {
console.log(_chalk.default.magentaBright(`Config File '${directory}/config.json' is not exist`));
process.exit(1);
}
}
function webpackInvalidHandler(stats) {
const info = stats.toJson();
if (stats.hasErrors()) {
info.errors.forEach(item => {
console.error(_chalk.default.magentaBright('Error: '));
console.error(item);
console.error();
});
process.exit(1);
}
if (stats.hasWarnings()) {
info.warnings.forEach(item => {
console.log(_chalk.default.yellowBright('Warning: '));
console.log(item);
console.log();
});
}
}
var _default = {
command: ['build [DIRECTORY]'],
describe: _chalk.default.cyan('build custom components that in `DIRECTORY`.'),
builder: yargs => yargs.reset().options({
o: {
alias: 'output',
default: 'bklc-custom-component-tmp-dir',
describe: 'Output dir',
type: 'string',
conflicts: 'exclude'
}
}).example('$0 build DIRECTORY', _chalk.default.cyan('build custom components that in `DIRECTORY`.')).help('h').alias('h', 'help').version(false).argv,
handler: argv => {
const directory = (argv.DIRECTORY || '').trim();
const absolutePath = _path.default.resolve(process.cwd(), directory);
const entryFile = _path.default.resolve(absolutePath, 'index.vue');
const configFile = _path.default.resolve(absolutePath, 'config.json');
validPath(directory, absolutePath, entryFile, configFile);
const tmpDirName = argv.output;
const targetDir = _path.default.resolve(process.cwd(), tmpDirName, `${_path.default.parse(directory).name}-${+new Date()}`);
const mergeConfig = {
entry: {
main: entryFile
},
output: {
path: targetDir
}
};
(0, _webpack.default)([(0, _webpackMerge.default)(_webpackIife.default, mergeConfig), (0, _webpackMerge.default)(_webpackUmd.default, mergeConfig)], (err, stats) => {
if (err) {
const {
stack,
details
} = err;
console.error(stack || err);
if (details) {
console.error(details);
}
return;
}
webpackInvalidHandler(stats);
_fsExtra.default.copySync(configFile, _path.default.resolve(targetDir, 'config.json'));
const zipFileName = `${_path.default.parse(directory).name}.zip`;
const zipOutput = (0, _fs.createWriteStream)(_path.default.resolve(_path.default.resolve(process.cwd(), tmpDirName), zipFileName));
const zipArchive = (0, _archiver.default)('zip', {
zlib: {
level: 9
}
});
zipOutput.on('close', () => {
console.log(_chalk.default.cyanBright(`${'' + 'Built successfully. The zip file is '}${_chalk.default.greenBright(`./${tmpDirName + _path.default.sep + zipFileName}`)}, and the size is ${zipArchive.pointer()} total bytes\n`));
_fsExtra.default.removeSync(targetDir);
});
zipArchive.on('error', err => {
console.error(_chalk.default.magentaBright('ZIP Error: '));
console.error(err);
console.error();
throw err;
});
zipArchive.pipe(zipOutput);
zipArchive.directory(targetDir, `${_path.default.parse(directory).name}`).finalize();
});
}
};
exports.default = _default;
module.exports = exports["default"];