使用esbuild创建自己的cli-总结
时间:2023-05-04 01:07:00
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: () =&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()) // 这样就能打出蓝色的字体