1. ejs渲染
**ejs**
import ejx from 'ejs' const indexTemplate = fs.readFileSync( path.resolve(__direname, '../template/index.ejs') ) const code = ejx.render(indexTemplate.toString(), {
// ... })
2. 绝对路径
**esbuild**
**__dirname**
import {
fileURLToPath } from 'url' import path from 'path' const __direname = fileURLToPath(import.meta.url) const indexTemplate = fs.readFileSync( path.resolve(__direname, '../template/index.ejs') )
3 格式化的模块化引擎
import prettier from 'prettier' prettier.format(code, {
parser: 'babel' })
4. 终端交互输入
**inquirer**
import inquirer from 'inquirer' await inquirer.prompt([ {
type: 'input', name: 'port', default: () =&t; 8080,
message: 'set port number'
},
{
type: 'input',
name: 'packageName',
message: 'set package name',
validate (val) {
if (val) return true
return 'Please input packName'
}
},
{
type: 'checkbox',
name: 'middleware',
choices: [
{
name: 'koaStatic' },
{
name: 'koaRouter' },
]
}
])
5. 安装依赖
**yarn**
import {
execa } from 'execa'
execa('yarn', {
cwd: getRootPath(), // 安装依赖到哪个文件夹下
stdio: [2, 2, 2], // 出现安装的进度
})
6. 执行进程
**chalk**
import chalk from 'chalk'
console.log(chalk.blue()) // 这样就能打出蓝色的字体