脚手架 - 直接用node环境搭建一个简单脚手架

 

项目网址:https://gitee.com/big-right-right/scaffolding-sample

一. 一个简单的node脚手架

在需要的目录下执行本脚手架命令(scaffolding-sample),可接收用户输入,并根据用户输入生成模板文件。

二. 步骤

1. 初始化package.json文件:

yarn init

2. 在package.json中,新增如下 bin  属性:

"bin": "cli.js",

package.json文件:

{
  "name": "scaffolding-sample",
  "version": "1.0.0",
  "main": "index.js",
  "bin": "cli.js",
  "repository": "https://gitee.com/big-right-right/scaffolding-sample.git",
  "author": "252057460@qq.com",
  "license": "MIT",
  "dependencies": {
    "ejs": "^3.1.5",
    "inquirer": "^7.3.3"
  }
}

3. 在项目根目录下新增 cli.js 文件:

#!/usr/bin/env node

// Node CLI 应用入口文件必须要有这样的文件头
// 如果是 Linux 或 maxOS 系统下还需要修改此文件的读写权限为 755
// 具体就是通过 chmod 755 cli.js

console.log('cli working!')

4. 执行 yarn link 把本项目存入yarn全局缓存

yarn link

5. 测试执行本cli命令(可正常打印出“cli working!”)

scaffolding-sample

6. 脚手架的工作过程:

  1.通过命令行交互询问用户问题

  2.根据用户回答的结果生成文件

  3.在node中,可询问用户问题的模块可以用 inquirer, 安装该模块:

yarn add inquirer

7. 修改 cli.js文件内容为如下:

#!/usr/bin/env node

// Node CLI 应用入口文件必须要有这样的文件头
// 如果是 Linux 或 maxOS 系统下还需要修改此文件的读写权限为 755
// 具体就是通过 chmod 755 cli.js

// 脚手架的工作过程:
// 1. 通过命令行交互询问用户问题
// 2. 根据用户回答的结果生成文件

const inquirer = require('inquirer')
inquirer.prompt([
    {
        type: 'input',
        name: 'name',
        message: 'Project name?'
    }
])
.then(answers => {
    console.log(answers)
})

8. 项目根目录下新建templage模板文件夹,其中新建两个模板文件:

index.html:

<html>
    <head>
        <title><%= name %></title>
    </head>
    <body>
        
    </body>
</html>

style.css:

.<%=name%>{
    color: pink;
}

9. 修改cli.js文件的内容 如下:

#!/usr/bin/env node

// Node CLI 应用入口文件必须要有这样的文件头
// 如果是 Linux 或 maxOS 系统下还需要修改此文件的读写权限为 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([ // 1. 通过命令行交互询问用户问题
    {
        type: 'input',
        name: 'name',
        message: 'Project name?'
    }
])
.then(answers => { // 2. 根据用户回答的结果生成文件
    
    // 模板目录
    const tmlDir = path.join(__dirname, 'templates')
    
    // 目标目录
    const destDir = process.cwd()
    
    // 将模板下文件全部转换到目标目录
    fs.readdir(tmlDir, (err, files) => {
        if(err) throw err
        files.forEach(file => {
            // 通过模板引擎渲染文件 此处使用ejs模板引擎
            ejs.renderFile(path.join(tmlDir, file), answers, (err, result) => {
                if(err) throw err
                
                // 将渲染结果写入文件
                fs.writeFileSync(path.join(destDir, file), result)
            })
        })
    })
})

10. 此时,一个可接收用户输入,并根据用户输入渲染templates目录下文件的脚手架项目就完成了,可在需要的目录下执行该脚手架命令,即可生成项目文件结构:

scaffolding-sample

本文 完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值