163 lines
6.2 KiB
TypeScript
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)
|
|
} |