代码拉取完成,页面将自动刷新
import fs from 'fs'
import minimist from 'minimist'
import path from 'path'
import prompts from 'prompts'
import { configType, configTypeDeepRequired, deepAssign, readJsonFile } from './utils'
import { defaultConfig } from './utils/defaultConfig'
const argv = minimist(process.argv.slice(2), { string: ['_'] })
let projectName = argv._[0]
let defaultProjectName = projectName ?? 'test-project'
const autoImport = (defaultConfig: configTypeDeepRequired) => {
const { templatesRoot, dirAlias } = defaultConfig
const templatesData = {} as any
let projectNames = fs.readdirSync(templatesRoot)
projectNames.forEach((value) => {
templatesData[value] = { title: value }
templatesData[value]['options'] = []
const optionsPath = path.join(templatesRoot, value, dirAlias.options)
if (fs.existsSync(optionsPath)) {
fs.readdirSync(optionsPath).forEach((v2) => {
templatesData[value]['options'].push({
title: v2,
value: v2
})
})
}
})
return templatesData
}
const handleOptions = (autoLoad: boolean, defaultConfig: configTypeDeepRequired) => {
let data: any = autoLoad ? autoImport(defaultConfig) : readJsonFile(path.join(__dirname, './templatesData.json'))
const options = []
let obj = {
type: 'select',
name: 'templateName',
message: 'Pick template',
choices: [] as Array<any>
}
Object.keys(data).map((k) => {
const title = data[k]['title']
const value = k
obj.choices.push({ title, value })
})
options.push(obj)
options.push({
type: (prev: any) => (data[prev]['options']?.length > 1 ? 'multiselect' : null),
name: 'options',
message: 'Pick options',
choices: (prev: any) => data[prev]['options']
})
return options
}
export const inquiry = async (autoLoad: boolean = false): Promise<configType> => {
const templatesRoot = path.resolve(__dirname, './templates')
const initConfig = deepAssign(defaultConfig, {
templatesRoot
} as Partial<typeof defaultConfig>)
const promptsOptions: Array<any> = handleOptions(autoLoad, initConfig)
const promptsArray: Array<any> = [
{
name: 'projectName',
type: projectName ? null : 'text',
message: 'Project name:',
initial: defaultProjectName,
onState: (state: any) => (projectName = String(state.value).trim() || defaultProjectName)
},
...promptsOptions
]
let promptsResult = (await prompts(promptsArray)) as {
projectName: string
templateName: string
options: Array<string>
}
promptsResult.projectName = promptsResult.projectName ?? defaultProjectName
const config: configType = deepAssign(initConfig, {
projectName: promptsResult['projectName'],
templateName: promptsResult['templateName'],
options: promptsResult['options']
})
return config
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。