用 Plop 加快项目相似代码生成

Plop.js是一个小巧的生成器框架,适用于快速创建如路由、控制器和组件等代码。在Vue3项目中,通过安装并配置Plop,可以自定义生成组件的模板。例如,创建一个包含模板文件的plopfile.cjs,然后定义交互式提示来选择组件路径和名称。在命令行运行plop命令,将根据模板生成组件文件。Plop结合Handlebars语法,使代码生成更高效,学习成本低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Plop 简单介绍

Plop是一个小型生成器框架,比如你要创建路由、控制器、组件等代码时,它就用得上了,而且你可以高度定制化它。

2. 安装

使用自己喜欢的 node 包管理工具安装即可,也可全局安装它。如:

pnpm install plop -D

package.jsonscripts 中添加命令 "plop": "plop"

3. vue3 项目中使用 plop 示例

3.1 项目根下创建plopfile.cjs

module.exports = function (plop) {
  plop.setWelcomeMessage("请选择需要创建的模式:");
  plop.setGenerator("component", require("./plop-templates/component/prompt.cjs"));
};

3.2 目录/plop-templates/下创建模板目录及模板文件

plop-templates/component/index.hbs 内容:

<script setup{{#if isGlobal}} name="{{ properCase name }}"{{/if}}>
</script>

<template>
  <div>
  </div>
</template>

<style lang="scss" scoped>
// scss
</style>

plop-templates/component/prompt.cjs 内容:

const fs = require('fs')

function getFolder(path) {
  const components = []
  const files = fs.readdirSync(path)
  files.forEach((item) => {
    const stat = fs.lstatSync(`${path}/${item}`)
    if (stat.isDirectory() === true && item !== 'components') {
      components.push(`${path}/${item}`)
      components.push(...getFolder(`${path}/${item}`))
    }
  })
  return components
}

module.exports = {
  description: '创建组件',
  prompts: [
    {
      type: 'confirm',
      name: 'isGlobal',
      message: '是否为全局组件',
      default: false,
    },
    {
      type: 'list',
      name: 'path',
      message: '请选择组件创建目录',
      choices: getFolder('src/views'),
      when: (answers) => {
        return !answers.isGlobal
      },
    },
    {
      type: 'input',
      name: 'name',
      message: '请输入组件名称',
      validate: (v) => {
        if (!v || v.trim === '')
          return '组件名称不能为空'
        else
          return true
      },
    },
  ],
  actions: (data) => {
    let path = ''
    if (data.isGlobal)
      path = 'src/components/{{properCase name}}/index.vue'
    else
      path = `${data.path}/components/{{properCase name}}/index.vue`

    const actions = [
      {
        type: 'add',
        path,
        templateFile: 'plop-templates/component/index.hbs',
      },
    ]
    return actions
  },
}

4. 命令使用

在项目目录下,使用包管理命令,执行 plop 命令,如:

pnpm plop

随后会以交互方式根据 component 模板文件生成 component 文件至相应目录。
是不是非常简单呢?当然,模板文件很复杂,你还需要学会使用 handlebars 语法,一般模板文件需求也不会很复杂,使用的时候查 plop 和 handlebars 文档,功能够用就行,学习成本较低。

参考资料:
[1] https://plopjs.com/documentation/
[2] https://handlebarsjs.com/zh/guide/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ygqygq2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值