大部分脚手架应用的原理就是一个node cli应用,通过命令行交互将动态变化的信息提供给用户输入,然后再经过模板引擎将信息填入模板文件,最后写入文件,得到工程初始化的基本文件,本文介绍怎样实现一个简单的脚手架工具
1.初始化
npm init
填入信息后生成package.json,添加一行"bin": "cli.js"
,然后按照ejs模板格式创建模板文件
image.png
2.安装依赖
用户输入模块inquirer
npm install inquirer
模板引擎模块ejs
npm install ejs
3.创建cli.js文件
修改文件权限
chmod 755 cli.js
生成器代码
#!/usr/bin/env node
const fs = require('fs')
const inquirer = require('inquirer')
const path = require('path')
const ejs = require('ejs')
inquirer.prompt([{
type: 'input',
name: 'name', // 名称
message: 'project name'
},{
type: 'input',
name: 'author', // 作者
message: 'author name'
},{
type: 'input',
name: 'email', // email
message: 'email'
}]).then(answer => {
this.answer = answer
console.log(answer)
// 目录
const tempDir = path.join(__dirname, 'templates')
const destDir = process.cwd()
// 读取templates目录下面的文件
fs.readdir(tempDir, (err, files) => {
if (err) throw err
// 写入文件
files.forEach(file => {
ejs.renderFile(path.join(tempDir, file), this.answer, (err, result) => {
if (err) {
console.log(err)
} else {
console.log('create ' + file)
}
fs.writeFileSync(path.join(destDir, file), result)
})
})
})
})
4.链接到全局
npm link
5.使用
mkdir node-cli-test && cd node-cli-test && node-cli
bingwudeMacBook-Pro:Generators bingwu$ mkdir node-cli-test && cd node-cli-test && node-cli
? project name node-cli-test
? author name bing
? email 123@163.com
{ name: 'node-cli-test', author: 'bing', email: '123@163.com' }
create index.html
create index.js
create readme.txt
create style.css