当前位置: 首页 > news >正文

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

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/

相关文章:

  • Codeforces Round #822 (Div. 2) 补题 (A、B、C)
  • 【初阶与进阶C++详解】第十六篇:AVL树-平衡搜索二叉树(定义+插入+旋转+验证)
  • 去除多重共线性的5种方法,你学废了嘛?
  • Verilog的奇技淫巧[更新中]
  • 被CTO推荐的SQL总结
  • 第八章 时序检查(下)
  • Android 10 低内存应用白名单和应用保活
  • 攻防演练中攻击队需要的安全技能第二篇
  • C#的File 类使用说明
  • 零基础能学大数据技术吗?学完能找到工作吗?
  • 实时即未来,车联网项目之远程诊断实时故障分析【七】
  • 《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则
  • 【Android-实战】1、Room 使用 Flow 和 collect() 监听数据库的变化、动态更新页面
  • python字符串应用
  • asp.net高校网上评教信息系统VS开发sqlserver数据库web结构c#编程计算机网页项目
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • CSS中外联样式表代表的含义
  • js学习笔记
  • Python - 闭包Closure
  • rabbitmq延迟消息示例
  • windows下如何用phpstorm同步测试服务器
  • 高程读书笔记 第六章 面向对象程序设计
  • 搞机器学习要哪些技能
  • 记录:CentOS7.2配置LNMP环境记录
  • 前嗅ForeSpider教程:创建模板
  • 深度学习中的信息论知识详解
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 我这样减少了26.5M Java内存!
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 交换综合实验一
  • 进程与线程(三)——进程/线程间通信
  • ​TypeScript都不会用,也敢说会前端?
  • #laravel 通过手动安装依赖PHPExcel#
  • #QT(串口助手-界面)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2)STM32单片机上位机
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Scala的“=”符号简介
  • (转)shell中括号的特殊用法 linux if多条件判断
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net mvc总结
  • .NET 材料检测系统崩溃分析
  • .net 反编译_.net反编译的相关问题
  • .NET 事件模型教程(二)
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET中两种OCR方式对比
  • // an array of int
  • /dev/sda2 is mounted; will not make a filesystem here!