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

在 Vue 的template中使用 Pug 的完整教程

在 Vue 的template中使用 Pug 的完整教程

引言

什么是 Pug?

Pug(原名 Jade)是一种高效的网页模板引擎,通过缩进式语法和简洁的写法减少 HTML 的冗长代码。Pug 省略了尖括号和闭合标签,使用缩进定义结构,使代码更简洁、可读。

示例:Vue 单文件组件中使用 Pug 模板和使用 HTML 模板对比

以下是一个 Vue 单文件组件,展示同一段dom结构,Pug 的高级语法和 HTML 语法的对比:

示例

Pug 特性展示

  • Pug以缩进的方式决定标签层级,无需闭合标签
  • 类名简写.container 代替 <div class="container">,省略 div
  • 链式类名.container.mx-auto.py-4 快速定义多个类名。
  • 单行文本:标签后面可以直接书写文本。
  • 多行文本p 标签内的 el-tag(type='primary') 多行| 的描述 展示多行文本的灵活性。
  • Vue 指令v-forv-if@click 与 Pug 无缝集成。

Pug 的简洁性减少了约 40% 的开发代码量(基于字符数),并通过缩进清晰展示 DOM 结构。它的类名简写、链式类名和文本处理功能尤其适合快速开发。

设置开发环境

以下是 Vue 项目配置 Pug 的详细步骤,安装步骤配置即可。

1. 安装 Pug

安装 Pug 作为开发依赖:

npm install -D pug

说明

  • 安装后,Pug 将用于编译 <template lang="pug"> 中的模板。

2. 安装 Prettier 的 pug 插件

Prettier 是一个代码格式化工具,但默认不支持 Pug。为此,您需要安装 @prettier/plugin-pug 以支持 Pug 代码格式化:

npm install -D @prettier/plugin-pug

说明

  • 如果未安装 Prettier,先运行 npm install -D prettier
  • 该插件确保 Prettier 能正确格式化 Pug 代码,保持代码风格一致。

3. 配置 Prettier

在项目根目录创建或编辑 .prettierrc 文件,添加以下插件扩展的配置:

{// 其他配置......"plugins": ["@prettier/plugin-pug"],"pugCommentPreserveSpaces": "keep-all","pugSortAttributes": "desc","pugFramework": "vue","pugSingleFileComponentIndentation": true
}

详细解释

  • "plugins": ["@prettier/plugin-pug"]:启用 Pug 格式化。
  • "pugCommentPreserveSpaces": "keep-all":保留注释前空格。
  • "pugSortAttributes": "desc":按降序排序属性。
  • "pugFramework": "vue":优化 Vue 单文件组件。
  • "pugSingleFileComponentIndentation": true:启用 SFC 缩进。

4. 安装 ESLint 插件

安装 eslint-plugin-vue-pug 以支持 Pug 模板的代码质量检查:

npm install -D eslint-plugin-vue-pug

说明

  • 如果未安装 ESLint 和 Vue 插件,先运行 npm install -D eslint eslint-plugin-vue

5. 配置 ESLint

.eslintrc 中添加:

{// 其他配置......"extends": ["plugin:vue/vue3-recommended", "plugin:vue-pug/vue3-recommended"]
}

详细解释

  • "plugin:vue/vue3-recommended":Vue 3 的推荐规则。
  • "plugin:vue-pug/vue3-recommended":支持 Pug 模板 linting。
  • 该插件仅 lint 与 HTML 对应的 Pug 语法,暂不支持 Pug 的 mixin、循环等高级特性。
  • 使用 LF 换行符以避免 Pug 词法分析错误。

6. 配置 Vite

编辑 vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'export default defineConfig({// 其他配置......optimizeDeps: {include: ['pug']}
})

说明

  • optimizeDeps.include: ['pug'] 确保 Vite 预构建 Pug。

7. 安装 Vue 语言插件

到这一步我们已经可以正常在 vue 里使用 pug 模板语法了,但是你会发现,在 vue 单文件组件里使用 pug 模板语法,vscode无法识别到模板里变量方法,以及没有标签、属性、指令(如 v-if、v-for)、组件名等的自动补全,开发体验极差。

这里我们需要安装 @vue/language-plugin-pug 以支持 vscode 的变量识别和 vue 语法自动补全:

npm install -D @vue/language-plugin-pug

然后在 tsconfig.json 或者 jsconfig.json 中添加:

{"compilerOptions": {// 其他配置...},"vueCompilerOptions": {"plugins": ["@vue/language-plugin-pug"]}
}

说明

  • 启用 Pug 语言支持,确保 vscode 识别 Vue 的动态语法。

Vue 单文件组件中使用 Pug

(由于文章代码块不支持pug代码高亮,以下示例全部使用截图展示)

基本使用

使用 <template lang="pug"> 定义模板:

pug

说明

  • div标签可以直接省略标签名,比如<div class="container"> 简写 .container
  • lang="pug" 指示使用 Pug 解析。
  • 单行文本可以直接写在标签后边,
  • 如:h1.text-xl Hello, Pug in Vue!,等同于<h1 class="text-xl">Hello, Pug in Vue!</h1>

处理变量和表达式

使用 Vue 的 {{ }} 插值:

pug

说明

  • {{ user.name }}{{ user.description }} 使用 Vue 插值。
  • .card.p-4 展示链式类名。

使用 Vue 指令

Pug 支持 Vue 指令:

pug

说明

  • v-forv-if 使用 Vue 语法。
  • .list-container.mx-auto.item.py-2 展示类名简写和链式写法。

单行和多行文本

Pug 提供灵活的文本处理:

pug

说明

  • 标签后面可以直接书写文本,也可以另起一行使用|开头书写文本。
  • p 内的 | 这是一个strong.text-red-500 多行 展示多行文本,支持内嵌标签。

组件注册和使用

pug

说明

  • 组件可以 直接在 Pug 中使用,结构简洁。

常见问题排查

问题解决方案
变量无法识别确保 @vue/language-plugin-pug 已配置。
缩进错误使用 2 个空格,检查 .prettierrc 配置。
ESLint 报错验证 .eslintrc 包含 plugin:vue-pug/vue3-recommended

进一步学习资源

  • Pug 官方文档
  • Vue.js 官方文档
  • @prettier/plugin-pug
  • eslint-plugin-vue-pug
  • @vue/language-plugin-pug
http://www.xdnf.cn/news/881209.html

相关文章:

  • 高敏感应用如何保护自身不被逆向?iOS 安全加固策略与工具组合实战(含 Ipa Guard 等)
  • 从内核到应用层:Linux缓冲机制与语言缓冲区的协同解析
  • 数据集-目标检测系列- 猴子 数据集 monkey >> DataBall
  • 数字孪生在建设智慧城市中可以起到哪些作用或帮助?
  • Go语言底层(三): sync 锁 与 对象池
  • 结合Jenkins、Docker和Kubernetes等主流工具,部署Spring Boot自动化实战指南
  • 如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道
  • 在Docker里面运行Docker
  • Windows11:解决近期更新后无法上网的问题
  • .net ORM框架dapper批量插入
  • 案例分享--汽车制动卡钳DIC测量
  • PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第二部分)
  • 智慧赋能:新能源汽车充电桩应用现状与管理升级方案
  • 矩阵分解相关知识点总结(二)
  • Playwright 测试框架 - Java
  • 【缺陷】温度对半导体缺陷电荷态跃迁能级的影响
  • React 样式方案与状态方案初探
  • AiPy实战:10分钟用AI造了个音乐游戏!
  • c++ 通过XOR自己实现一个对称分组加密算法
  • 谷歌披露威胁组织攻击方式:伪造Salesforce数据加载器实施钓鱼攻击
  • 使用 uv 工具快速部署并管理 vLLM 推理环境
  • [10-1]I2C通信协议 江协科技学习笔记(17个知识点)
  • 网站首页菜单两种布局vue+elementui顶部和左侧栏导航
  • 为什么需要自动下载浏览器驱动?
  • Linux(13)——Ext系列⽂件系统
  • Amazing晶焱科技:电子系统产品在多次静电放电测试后的退化案例
  • RKNN3588上部署 RTDETRV2
  • Day45
  • [Git] 分布式版本控制 远程仓库协作
  • C语言输入函数