分析实现步骤:
- 通过 yarn 初始化一个项目
- 在 package.json 添加一个 cli 入口文件 bin 字段
- 通过inquirer 模块实现命令行交互
- 询问用户问题,拿到配置结果
- 根据用户回答生成模版文件
package.json文件
{
"name": "sample-scaffolding",
"version": "1.0.0",
"main": "index.js",
"bin": "cli.js",
"license": "MIT",
"dependencies": {
"ejs": "^3.1.6",
"inquirer": "^8.1.2"
}
}
cli.js文件
#!/usr/bin/env node
// Node CLI应用入口文件必须要有种这样的文件头
// 这是告诉系统,下面这个脚本,使用nodejs来执行
// 如果是Linux或者macOS系统,还需要修改此文件的读写权限755
// sudo chmod -R 755 myResources
const inquirer = require('inquirer');
const path = require('path');
const fs = require('fs');
const ejs = require('ejs');
inquirer
.prompt([
{
type: 'input',
name: 'name',
message: '项目名字是啥?',
},
])
.then((anwsers) => {
// 模版目录
const tempDir = path.join(__dirname, 'templates');
// 目标目录
const destDir = process.cwd();
// 将模板下的文件全部转换到目标目录
fs.readdir(tempDir, (err, files) => {
if (err) throw err;
files.forEach((file) => {
// 通过模版引擎渲染文件
ejs.renderFile(path.join(tempDir, file), anwsers, (err, result) => {
if (err) throw errfs;
fs.writeFileSync(path.join(destDir, file), result);
});
});
});
});
目录结构