脚手架工具实际上就是node-cli应用, 创建脚手架工具实际上就是创建一个cli应用,
步骤
1.首先创建一个文件夹,通过npm init创建一个package.json文件
- 在package.json中指定一个bin字段做为入口文件

- 创建这个文件并在这个文件中开头写入
#!/usr/bin/env node,node cli入口文件必须要有这样的文件头,
如果是linux 或者 mac 还要修改此文件的权限为755,通过 chmod 755 cli.js进行修改。
- 通过
yarn link命令将此模块link到全局,然后执行命令(link时所在文件夹的名字)nodecli,查看 我们的打印结果:

到此说明我们的cli应用的基础就已经ok了
- 脚手架工作过程:1.通过命令交互询问用户问题,2.根据用户回答的结构生成文件
在node中使用inquirer模块 发起命令询问,首先安装 yarn add inquirer
执行 nodecli 可见打印出:
- 然后我们创建index.html,和style.css两个基础文件作为我们的测试文件


在then方法中根据用户回答的结果去生成文件,
- 新建一个目录,执行nodecli命令,根据提示输入项目名称,然后就会生成一个带有index.html和style.css文件的项目

完整的简简单单的node脚手架就完成拉,基本原理大概就是这样:
#!/usr/bin/env node//node cli入口文件必须要有这样的文件头//如果是linux 或者 mac 还要修改此文件的权限为755//通过 chmod 755 cli.js进行修改console.log("i am working")//脚手架工作过程//1.通过命令交互询问用户问题//2.根据用户回答的结构生成文件//在node中使用inquirer模块 发起命令询问,首先安装 yarn add inquirerconst inquirer = require('inquirer')const fs = require('fs')const path = require('path')const ejs = require('ejs')inquirer.prompt([//发起命令行的询问,数组中的每一个成员都是我们的一个询问{type: 'input',//s输入方式name: 'name',//返回值的键message: 'Project name??',//屏幕上给用户的提示name: 'name',name: 'name',}]).then((message) => {//then里面接收到的用户的答案//console.log(message)//根据用户回答的结果去生成文件//首先把模板的目录和目标目录确定下来,//模板目录const tmpDir = path.join(__dirname, 'templates')//目标目录const destDir = process.cwd()//通过fs读取模块,将模板下的文件全部切换到目标目录fs.readdir(tmpDir, (err, files) => {if (err) throw errconsole.log(files)//通过模板引擎去渲染这个路径所对应的文件files.forEach(item => {//安装一个模板引擎 yarn add ejs//通过模板引擎渲染文件ejs.renderFile(path.join(tmpDir, item), message, (err, result) => {if (err) throw err//将结果写入目标文件fs.writeFileSync(path.join(destDir, item), result)})})})})
