脚手架工作原理

脚手架工具就是在启动它之后自动询问一些预设的问题,然后将回答的结果结合一些模板文件生成一个项目的结构

通过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文件夹下查看,模板文件已生成

你可能感兴趣的:(脚手架工作原理)