前端工程化工具——plop的使用-生成模板页面

背景

软件列表

软件名称版本号备注
vue3.2.13
vue-cli5.0.8
plop4.0.1

操作步骤

新建vue3工程

vue create test-plop

按提示完成操作即可
在这里插入图片描述
在这里插入图片描述
modules安装工具选择:yarn或npm均可

安装plop模块

yarn add plop -g

新建模板文件

在这里插入图片描述

page1/index.hbs

<template>
    <div>
        Page1
    </div>
</template>
<script setup name="{{ properCase componentName }}">
// const { proxy } = getCurrentInstance()
// const router = useRouter()
// const route = useRoute()
</script>
<style lang="less" scoped>
</style>

page1/prompt.js

const path = require('path')
const fs = require('fs')
function getFolder(path) {
    let components = []
    const files = fs.readdirSync(path)
    files.forEach(function (item) {
        let stat = fs.lstatSync(path + '/' + item)
        if (stat.isDirectory() === true && item != 'components') {
            components.push(path + '/' + item)
            components.push.apply(components, getFolder(path + '/' + item))
        }
    })
    return components
}
module.exports = {
    description: '创建页面',
    prompts: [
        {
            type: 'list',
            name: 'path',
            message: '请选择页面创建目录',
            choices: getFolder('src/pages')
        },
        {
            type: 'input',
            name: 'name',
            message: '请输入文件名',
            validate: v => {
                if (!v || v.trim === '') {
                    return '文件名不能为空'
                } else {
                    return true
                }
            }
        }
    ],
    actions: data => {
        let relativePath = path.relative('src/pages', data.path)
        const actions = [
            {
                type: 'add',
                path: `${data.path}/{{dotCase name}}.vue`,
                templateFile: 'plop-tpls/page1/index.hbs',
                data: {
                    componentName: `${relativePath} ${data.name}`
                }
            }
        ]
        return actions
    }
}

page2/index.hbs

<template>
    <div>
        Page2
    </div>
</template>
<script setup name="{{ properCase componentName }}">
// const { proxy } = getCurrentInstance()
// const router = useRouter()
// const route = useRoute()
</script>
<style lang="less" scoped>
</style>

page2/prompt.js

const path = require('path')
const fs = require('fs')
function getFolder(path) {
    let components = []
    const files = fs.readdirSync(path)
    files.forEach(function (item) {
        let stat = fs.lstatSync(path + '/' + item)
        if (stat.isDirectory() === true && item != 'components') {
            components.push(path + '/' + item)
            components.push.apply(components, getFolder(path + '/' + item))
        }
    })
    return components
}
module.exports = {
    description: '创建页面',
    prompts: [
        {
            type: 'list',
            name: 'path',
            message: '请选择页面创建目录',
            choices: getFolder('src/pages')
        },
        {
            type: 'input',
            name: 'name',
            message: '请输入文件名',
            validate: v => {
                if (!v || v.trim === '') {
                    return '文件名不能为空'
                } else {
                    return true
                }
            }
        }
    ],
    actions: data => {
        let relativePath = path.relative('src/pages', data.path)
        const actions = [
            {
                type: 'add',
                path: `${data.path}/{{dotCase name}}.vue`,
                templateFile: 'plop-tpls/page2/index.hbs',
                data: {
                    componentName: `${relativePath} ${data.name}`
                }
            }
        ]
        return actions
    }
}

新增plop配置文件

位置:项目根目录
文件名:plopfile.js
内容

module.exports = function (plop) {
  plop.setWelcomeMessage('请选择需要创建的模式:')
  
  plop.setGenerator('page1', require('./plop-tpls/page1/prompt'))
  plop.setGenerator('page2', require('./plop-tpls/page2/prompt'))
}

新增script配置plop

位置:项目根目录
修改文件:package.json
字段:script
内容:

"plop": "plop"

在这里插入图片描述

新建src/pages

新建src/pages目录,防止执行yarn plop出错,提示找不到该目录

生成模板页面

  1. 执行yarn plop命令
  2. 依据命令操作
    在这里插入图片描述
    在这里插入图片描述

整体效果

在这里插入图片描述

demo

源码下载地址

见文首

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值