@tuzki/cli
Version:
🐇 lowcode-cli is an efficient cli tool for Rabbitpre plugin component secondary development. ❤️
129 lines (128 loc) • 5.23 kB
JavaScript
/*
* 根据传入的 serviceConfig 实例化 build-scripts 的 Service,
* 具体 Service 实现参考:https://github.com/ice-lab/build-scripts/blob/master/packages/build-scripts/src/Service.ts
*
* @Author: xu.jin
* @Date: 2022-11-15 09:51:43
*
* Copyright © 2014-2022 Rabbitpre.com. All Rights Reserved.
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import Logger from '@tuzki/scaffold-logger';
import ProjectService from '@tuzki/scaffold-project-service';
import { COMMAND, } from '@tuzki/scaffold-types';
import { webpackBuild, webpackStart } from '@tuzki/scaffold-webpack-service';
import { Service } from 'build-scripts';
import webpack from 'webpack';
import { injectedUtils } from './injected-utils.js';
import { getGeneratorApi } from './utils/generator.js';
const logger = Logger.get('cli:create-service');
const createService = args => {
const { rootDir } = args;
try {
const generatorApi = getGeneratorApi({ rootDir });
const projectService = new ProjectService({
utils: injectedUtils,
});
const generator = Object.assign({}, generatorApi);
// 移除 generator 的 render,收紧 renderTemplate 的渲染
delete generator.render;
const service = new Service({
name: 'commandService',
command: {
// start command
[COMMAND.START]: (ctx) => __awaiter(void 0, void 0, void 0, function* () {
yield buildCommand(ctx, COMMAND.START);
}),
// debug project
[COMMAND.DEBUG]: (ctx) => __awaiter(void 0, void 0, void 0, function* () {
yield projectCommand(ctx, COMMAND.DEBUG);
}),
// build command
[COMMAND.BUILD]: (ctx) => __awaiter(void 0, void 0, void 0, function* () {
yield buildCommand(ctx, COMMAND.BUILD);
}),
// init-project
[COMMAND.INIT_PROJECT]: (ctx) => __awaiter(void 0, void 0, void 0, function* () {
yield projectCommand(ctx, COMMAND.INIT_PROJECT, generatorApi);
}),
// update-cmps command
[COMMAND.UPDATE_PROJECT]: (ctx) => __awaiter(void 0, void 0, void 0, function* () {
yield projectCommand(ctx, COMMAND.UPDATE_PROJECT, generatorApi);
}),
// deploy command
[COMMAND.DEPLOY]: (ctx) => __awaiter(void 0, void 0, void 0, function* () {
yield projectCommand(ctx, COMMAND.DEPLOY, generatorApi);
}),
},
extendsPluginAPI: {
webpack,
generator,
projectService,
},
});
return service;
}
catch (err) {
logger.error('createService error: ', err);
process.exit(1);
}
};
export default createService;
/**
* 构建/启动相关命令执行
* @param ctx build-script context
* @param command 命令名称
*/
const buildCommand = (ctx, command) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { userConfig, extendsPluginAPI } = ctx;
const { projectService } = extendsPluginAPI;
if (projectService.hasCommand(command)) {
yield projectService.executeCommand(command);
}
else if (!userConfig.vite) {
command === COMMAND.START
? yield webpackStart(ctx)
: yield webpackBuild(ctx);
}
}
catch (err) {
logger.error(`执行 ${command} 命令失败:`, err);
process.exit(1);
}
});
/**
* 项目相关命令执行
* @param ctx build-script context
* @param command 命令名称
* @param generator generator api
*/
const projectCommand = (ctx, command, generator) => __awaiter(void 0, void 0, void 0, function* () {
try {
const { extendsPluginAPI } = ctx;
const { projectService } = extendsPluginAPI;
if (projectService.hasCommand(command)) {
// 执行插件中注册 projectService 到的 update-project command,实现项目更新
yield projectService.executeCommand(command);
// 统一渲染插件中修改到 generator template
generator && generator.render();
}
else {
logger.error(`插件中未找到 ${command} 命令`);
process.exit(1);
}
}
catch (err) {
logger.error(`执行 ${command} 命令失败:`, err);
process.exit(1);
}
});