1. ejs渲染
我们可以通过**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: () => 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()) // 这样就能打出蓝色的字体