脚手架工具就是在启动它之后自动询问一些预设的问题,然后将回答的结果结合一些模板文件生成一个项目的结构
通过node.js开发一个小型的脚手架工具
脚手架工具就是一个cli应用,创建脚手架工具就是创建一个cli的应用
# 步骤
mkdir sample-scaffolding
cd sample-scaffolding
yarn init -y
code . //此命令打开package.json这个文件
# package.json文件中添加一个bin字段
"bin":"cli.js",用于指定cli应用的入口文件
然后添加cli.js这个文件
# 文件内容
# #!/usr/bin/env node 此处内容不需要加
console.log('cli working')
# yarn link 到全局、
yarn link
# 此时在命令行中去使用sample-scaffolding这个命令
控制台打印
则意味着cli应用的基础就完成了
#### 若不成功
则需要加入一下引用(作用就是可以被当成一个命令执行, 而不用 node cli.js 这样执行)
#!/usr/bin/env node
##### // Node CLI 应用入口文件必须要有这样的文件头
# 安装inquirer模块 可以帮我们发起命令行询问
yarn add inquirer
# 安装ejs模块,模板引擎
yarn add ejs
cli.js
#!/usr/bin/env node
// Node CLI 应用入口文件必须要有这样的文件头
// 如果是 Linux 或者 macOS 系统下还需要修改此文件的读写权限为 755
// 具体就是通过 chmod 755 cli.js 实现修改
// 脚手架的工作过程:
// 1. 通过命令行交互询问用户问题
// 2. 根据用户回答的结果生成文件
const fs = require('fs')
const path = require('path')
const inquirer = require('inquirer')
const ejs = require('ejs')
inquirer.prompt([
{
type: 'input',
name: 'name',
message: 'Project name?'
}
])
.then(anwsers => {
// console.log(anwsers)
// 根据用户回答的结果生成文件
// 模板目录
const tmplDir = path.join(__dirname, 'templates')
// 目标目录
const destDir = process.cwd()
// 将模板下的文件全部转换到目标目录
fs.readdir(tmplDir, (err, files) => {
if (err) throw err
files.forEach(file => {
// 通过模板引擎渲染文件
ejs.renderFile(path.join(tmplDir, file), anwsers, (err, result) => {
if (err) throw err
// 将结果写入目标文件路径
fs.writeFileSync(path.join(destDir, file), result)
})
})
})
})
# templates文件夹下为需要批量生成的文件
### 测试,执行命令
cd ..
mkdir demo-sample
cd demo-sample
sample-scaffolding
# 根据提示交互信息输入name,然后去demo-sample文件夹下查看,模板文件已生成