wl-cli
Version:
vue wlui wl-cli vue项目最佳工程目录结构脚手架
105 lines (89 loc) • 3.56 kB
JavaScript
;
var _get = require('./utils/get');
var _ora = require('ora');
var _ora2 = _interopRequireDefault(_ora);
var _inquirer = require('inquirer');
var _inquirer2 = _interopRequireDefault(_inquirer);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _logSymbols = require('log-symbols');
var _logSymbols2 = _interopRequireDefault(_logSymbols);
var _util = require('util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const exist = (0, _util.promisify)(_fs2.default.stat);
// 命令行交互配置项
const question = [{
type: 'input',
name: 'author',
message: 'Please enter the author name: '
}, {
type: 'input',
name: 'description',
message: 'Please enter the project description: '
}, {
type: 'list',
name: 'type',
message: 'Please enter the project type:',
choices: ["web", "mfe-subapp", "mfe-master", "simple-template"]
}, {
type: 'input',
name: 'port',
message: 'Please enter the project port: ',
default: 8080,
validate: function (val) {
if (val.match(/\d{2,6}/g)) {
// 校验位数
return true;
}
return "请输入2-6位数字";
}
}];
// 创建命令
let init = async projectName => {
if (!projectName) {
console.log(_chalk2.default.redBright.bold("请输入项目名称"));
return;
}
//项目不存在
try {
const projectExist = await exist(projectName);
if (projectExist) {
console.log(_logSymbols2.default.error, _chalk2.default.red('The project already exists! 该项目已存在!'));
}
} catch (error) {
//命令行交互
_inquirer2.default.prompt(question).then(async answer => {
//下载模板 选择模板
//通过配置文件,获取模板信息
let loading = (0, _ora2.default)('The project is in the process of initialization, please take a moment to wait for a long time ... 项目正在初始化中,耗时较久请稍事等待...');
loading.start();
loading.color = "yellow";
const projectType = answer.type;
(0, _get.downloadLocal)(projectName, projectType).then(() => {
loading.succeed();
// 写入package.json
const isNotMfeMaster = projectType !== 'mfe-master';
const packageJson = isNotMfeMaster ? `${projectName}/package.json` : `${projectName}/master/package.json`;
if (_fs2.default.existsSync(packageJson)) {
const data = _fs2.default.readFileSync(packageJson).toString();
let json = JSON.parse(data);
json.name = projectName; // 项目名
json.author = answer.author; // 作者
json.description = answer.description; // 描述信息
json.port = answer.port; // 端口号 默认8080
//修改项目文件夹中 package.json 文件
_fs2.default.writeFileSync(packageJson, JSON.stringify(json, null, '\t'), 'utf-8');
console.log(_logSymbols2.default.success, _chalk2.default.green('Project initialization finished! 项目初始化完成!依次运行以下命令:'));
console.log(_logSymbols2.default.success, _chalk2.default.green('cd ' + projectName));
console.log(_logSymbols2.default.success, _chalk2.default.green(isNotMfeMaster ? 'npm install' : 'npm run cinit'));
console.log(_logSymbols2.default.success, _chalk2.default.green('npm run serve'));
}
}, () => {
loading.fail();
});
});
}
};
module.exports = init;