UNPKG

@blueking/lesscode-cli

Version:

Command Tools for Lesscode

148 lines (117 loc) 4.68 kB
"use strict"; 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"];