Files
robin 879cd36baf 1
2022-12-01 21:48:35 +08:00

163 lines
6.2 KiB
TypeScript

/*
* @Author : djkloop
* @Date : 2020-08-15 17:21:22
* @LastEditors : djkloop
* @LastEditTime : 2021-10-04 19:33:38
* @Description : 头部注释
* @FilePath : /form-create2/tools/lib/build.ts
*/
import chalk from 'chalk';
import ora from 'ora';
import dayjs from 'dayjs';
import fs from 'fs';
import { exit } from 'process';
import shell from 'shelljs';
import createBuildComponents from './components';
import createBuildPackages from './packages';
import { blue, getFolderNames, getSingleComponentPaths, getSinglePackagePaths, red, targets as getAllTargetsPath, yellow } from './utils'
let spinner
const log = console.log
const context = process.cwd()
async function buildAllComponents(paths: string[] = []) {
let componentsPathsObject = Object.create(null)
paths.forEach((comPath: string) => {
const [name, cname] = comPath.split('/')
const componentsPaths = getSingleComponentPaths('components', name, cname)
if (!componentsPathsObject[name]) {
componentsPathsObject[name] = componentsPaths[name]
} else {
componentsPathsObject[name] = [...componentsPathsObject[name], ...componentsPaths[name]]
}
});
await createBuildComponents(componentsPathsObject)
await exit();
}
async function createBuildTask(args: any) {
const isAll = args.all || Object.keys(args).length === 0
const isComponentsAll = args?.components?.includes('all')
const isPackagesAll = args?.packages?.includes('all')
let tips = '';
if (isAll) {
tips = 'build all components and all packages'
} else if (isComponentsAll) {
tips = 'build all components'
} else if (isPackagesAll) {
tips = 'build all packages'
} else {
tips = ' build task time' + ' ' + dayjs().format('YYYY-MM-DD HH:mm:ss') + '\n'
}
yellow(tips, true)
blue(' ---------------------- start ----------------------\n', true)
/// not all components
if (!isComponentsAll && args?.components?.length) {
const libs = args?.components
if (libs.length === 1) {
/// 先切包名
const lib = libs[0];
/// 单包下存在多个包
if (lib.includes('*') || !lib.includes('/')) {
/// xxx/*
const [name] = !lib.includes('/') ? [lib] : lib.split('/')
const _p = getFolderNames('components', name)
buildAllComponents(_p)
} else {
const [name, cname] = lib.split('/')
const componentsPaths = getSingleComponentPaths('components', name, cname)
await createBuildComponents(componentsPaths)
await exit();
}
} else {
const compsPaths = args?.components;
const allPaths = compsPaths.filter(cp => cp.includes('*') || !cp.includes('/'));
const fixPaths = compsPaths.filter(cp => !cp.includes('*') && cp.includes('/'));
let _all_ = [...fixPaths]
if (allPaths.length) {
allPaths.forEach(allp => {
const [name] = !allp.includes('/') ? [allp] : allp.split('/')
const _p = getFolderNames('components', name)
_all_ = [..._all_, ..._p]
});
}
buildAllComponents(_all_)
}
}
if (!isPackagesAll && args?.packages?.length) {
const libs = args?.packages
if (libs.length === 1) {
/// 先切包名
const lib = libs[0];
const [name] = lib.split('/')
const packagesAllPaths = getSinglePackagePaths('packages', name)
await createBuildPackages(packagesAllPaths)
await exit();
} else {
let componentsPathsObject = Object.create(null)
libs.forEach(async lib => {
const componentsPaths = getSinglePackagePaths('packages', lib)
componentsPathsObject[lib] = componentsPaths[lib]
});
await createBuildPackages(componentsPathsObject)
await exit();
}
}
/// 如果是打包全部
if (isAll) {
/// 先打对应的依赖components
const componentsAllPaths = getAllTargetsPath('components')
const packagesAllPaths = getAllTargetsPath('packages')
if (!Object.keys(componentsAllPaths).length && !Object.keys(packagesAllPaths).length) {
yellow('\n no build components and packages task! please check buildFormCreateOptions or private with components/*/*/package.json \n')
exit(1);
}
if (!Object.keys(componentsAllPaths).length) {
yellow('\n no build components task! please check buildFormCreateOptions or private with components/*/*/package.json \n')
}
if (!Object.keys(packagesAllPaths).length) {
yellow('\n no build packages task! please check buildFormCreateOptions or private with packages/*/package.json \n')
}
/// 打印对应的组件
await createBuildComponents(componentsAllPaths)
/// 再打对应的包
await createBuildPackages(packagesAllPaths)
/// 退出
await exit();
} else {
/// 单独打所有的component组件
if(isComponentsAll) {
const componentsAllPaths = getAllTargetsPath('components')
if (!Object.keys(componentsAllPaths).length) {
yellow('\n no build components task! please check buildFormCreateOptions or private with components/*/*/package.json \n')
await exit(1)
}
await createBuildComponents(componentsAllPaths)
await exit();
}
/// 单独打所有的package包
if (isPackagesAll) {
const packagesAllPaths = getAllTargetsPath('packages')
if (!Object.keys(packagesAllPaths).length) {
yellow('\n no build packages task! please check buildFormCreateOptions or private with packages/*/package.json \n')
await exit(1)
}
await createBuildPackages(packagesAllPaths)
await exit();
}
}
}
export default (_: any, args: any) => {
return createBuildTask(args)
}