node搭建简易脚手架

脚手架工作过程

1.通过命令行交互询问用户问题
2.根据回答生成文件

初始化模块

1.初始化项目,在package.json添加bin入口
2.创建入口文件,添加#!/usr/bin/env node 标识

获取用户输入

使用inquirer模块进行交互

inquirer.prompt([
  {
    type:'input',
    name:'name',
    message:'project name?'
  }
]).then(answers => {
  
})
获取文件路径

使用path模块获取模板目录,_dirname代表项目当前目录,process.cwd()获取命令窗口目录

 const tmplDir = path.join(_dirname,'templates')
 const destDir = process.cwd()
将模板目录文件写到目标目录中

1.使用fs模块的readdir方法获取到模板文件的相对路径
2.使用模板引擎ejs的renderFile方法渲染文件
3.使用fs的writeFileSync方法写入到目标文件

 fs.readdir(tmplDir,(err,files)=>{
    if(err) throw err
    files.forEach(item=>{
      ejs.renderFile(path.join(tmplDir,item),answers,(err,res)=>{
        if (err) throw err
        fs.writeFileSync(path.join(destDir,item),res)
      })
    })
  })

完整代码

#!/usr/bin/env node

const inquirer = require('inquirer')
const path = require('path')
const fs = require('fs')
const ejs = require('ejs')

inquirer.prompt([
  {
    type:'input',
    name:'name',
    message:'project name?'
  }
]).then(answers => {
  //模板目录
  //_dirname是项目当前目录,process.cwd是命令行执行的目录
  const tmplDir = path.join(_dirname,'templates')
  const destDir = process.cwd()

  //将模板目录的文件写入到目标目录中
  //fs.readdir用于读取目录下的所有文件
  //ejs.renderFile方法参数:1.绝对路径 2.渲染参数 3.回调函数
  fs.readdir(tmplDir,(err,files)=>{
    if(err) throw err
    files.forEach(item=>{
      ejs.renderFile(path.join(tmplDir,item),answers,(err,res)=>{
        if (err) throw err
        fs.writeFileSync(path.join(destDir,item),res)
      })
    })
  })
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。