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

在 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

相关文章:

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

在 Vue 的template中使用 Pug 的完整教程 引言 什么是 Pug&#xff1f; Pug&#xff08;原名 Jade&#xff09;是一种高效的网页模板引擎&#xff0c;通过缩进式语法和简洁的写法减少 HTML 的冗长代码。Pug 省略了尖括号和闭合标签&#xff0c;使用缩进定义结构&#xff0c;…...

【立体匹配】:双目立体匹配SGBM:(1)运行

注&#xff1a;这是一个专题&#xff0c;我会一步步介绍SGBM的实现&#xff0c;按照我的使用和优化过程逐步改善算法&#xff0c;附带实现方法 系列文章【立体匹配】&#xff1a;双目立体匹配SGBM&#xff1a;&#xff08;1&#xff09;运行 【立体匹配】&#xff1a;双目立体匹…...

< 自用文 OS有关 新的JD云主机> 国内 京东云主机 2C4G 60G 5Mb 498/36月 Ubuntu22

攒了这么久&#xff0c;废话一些&#xff1a; 前几周很多事儿&#xff0c;打算回北京&#xff0c;开个清真的德克萨斯烤肉店&#xff0c;写了一篇 &#xff1a; &#xff1c; 自用文 Texas style Smoker &#xff1e; 美式德克萨斯烟熏炉 从设计到实现 &#xff08;第一部分&…...

十、【ESP32开发全栈指南: TCP客户端】

一、TCP协议核心特性回顾 TCP与UDP关键差异 特性TCPUDP连接方式面向连接 (三次握手)无连接可靠性可靠传输 (重传/排序/校验)尽力交付数据顺序保证数据按序到达不保证顺序流控制滑动窗口机制无流控制传输效率协议开销大头部开销小适用场景文件传输、网页浏览实时音视频、广播通…...

基于机器学习的智能故障预测系统:构建与优化

前言 在现代工业生产中&#xff0c;设备故障不仅会导致生产中断&#xff0c;还会带来巨大的经济损失。传统的故障检测方法依赖于人工巡检和定期维护&#xff0c;这种方式效率低下且难以提前预测潜在故障。随着工业物联网&#xff08;IIoT&#xff09;和机器学习技术的发展&…...

设计模式-观察着模式

观察者模式 观察者模式 (Observer Pattern) 是一种行为型设计模式&#xff0c;它定义了对象之间一种一对多的依赖关系&#xff0c;当一个对象&#xff08;称为主题或可观察者&#xff09;的状态发生改变时&#xff0c;所有依赖于它的对象&#xff08;称为观察者&#xff09;都…...

《架构即未来》笔记

思维导图 第一部分&#xff1a;可扩展性组织的人员配置 第二部分&#xff1a;构建可扩展的过程 第三部分&#xff1a;可扩展的架构方案 第四部分&#xff1a;其他的问题和挑战 资料 问软件工程研究所&#xff1a; https://www.sei.cmu.edu/ AKF公司博客: http://www.akfpart…...

stm32—ADC和DAC

ADC和DAC 在嵌入式系统中&#xff0c;微控制器经常需要与现实世界的模拟信号进行交互。STM32微控制器内置了模拟数字转换器&#xff08;ADC&#xff09;和数字模拟转换器&#xff08;DAC&#xff09;&#xff0c;它们是实现这种交互的关键模块。 1. 模拟数字转换器&#xff08…...

ubuntu2404 gpu 没接显示器,如何保证远程显示的分辨率

1. 使用 xserver-xorg-video-dummy 创建虚拟显示器 如果系统在无物理显示器连接时无法识别显示输出&#xff0c;可以使用 xserver-xorg-video-dummy 驱动程序创建虚拟显示器。以下是设置步骤&#xff1a; 安装虚拟显示器驱动程序&#xff1a; sudo apt install xserver-xorg-v…...

【基于阿里云搭建数据仓库(离线)】使用UDTF时出现报错“FlatEventUDTF cannot be resolved”

目录 问题&#xff1a; 可能的原因有&#xff1a; 解决方法&#xff1a; 问题&#xff1a; 已经将包含第三方依赖的jar包上传到dataworks&#xff0c;并且成功注册函数&#xff0c;但是还是报错&#xff1a;“FlatEventUDTF cannot be resolved”&#xff0c;如下&#xff1a…...

Pycharm的终端无法使用Anaconda命令行问题详细解决教程

很多初学者在Windows系统上安装了Anaconda后&#xff0c;在PyCharm终端中运行Conda命令时&#xff0c;会遇到以下错误&#xff1a; conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保…...

SAP学习笔记 - 开发24 - 前端Fiori开发 Filtering(过滤器),Sorting and Grouping(排序和分组)

上一章讲了SAP Fiori开发的表达式绑定&#xff0c;自定义格式化等内容。 SAP学习笔记 - 开发23 - 前端Fiori开发 Expression Binding&#xff08;表达式绑定&#xff09;&#xff0c;Custom Formatters&#xff08;自定义格式化&#xff09;-CSDN博客 本章继续讲SAP Fiori开发…...

【Flask】:轻量级Python Web框架详解

什么是Flask&#xff1f; Flask是一个用Python编写的轻量级Web应用框架。它被称为"微框架"(microframework)&#xff0c;因为它核心简单但可扩展性强&#xff0c;不强制使用特定的项目结构或库。Flask由Armin Ronacher开发&#xff0c;基于Werkzeug WSGI工具包和Jin…...

自建 dnslog 回显平台:渗透测试场景下的隐蔽回显利器

&#x1f50d; 背景介绍 在渗透测试与红队评估过程中&#xff0c;DNS 外带&#xff08;DNS Exfiltration&#xff09; 是一种常见且隐蔽的通信通道。由于多数目标环境默认具备外网 DNS 解析能力&#xff0c;即便在 无回显、无文件上传权限 的条件下&#xff0c;仍可通过 DNS 请…...

Digital IC Design Flow

Flow介绍 1.设计规格 架构师根据市场需求制作算法模型(Algorithm emulation)及芯片架构(Chip architecture),确定芯片设计规格书(Chip design specification) 原型验证 原型验证(Prototype Validation)通常位于产品开发流程的前期阶段,主要是在设计和开发的初步阶…...

设备健康管理的范式革命:中讯烛龙全链路智能守护系统

当工业设备的“亚健康”状态导致隐性产能损失高达23%时&#xff0c;中讯烛龙推出 ​​“感知-诊断-决策-闭环”四位一体解决方案&#xff0c;让设备全生命周期健康管理成为企业增长的隐形引擎。 一、行业痛点&#xff1a;传统运维的三大断层 1. 健康感知盲区 某风电场因无法捕…...

循环神经网络(RNN):从理论到翻译

循环神经网络&#xff08;RNN&#xff09;是一种专为处理序列数据设计的神经网络&#xff0c;如时间序列、自然语言或语音。与传统的全连接神经网络不同&#xff0c;RNN具有"记忆"功能&#xff0c;通过循环传递信息&#xff0c;使其特别适合需要考虑上下文或顺序的任…...

Redis:常用数据结构 单线程模型

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Redis &#x1f525; 常用数据结构 &#x1f433; Redis 当中常用的数据结构如下所示&#xff1a; Redis 在底层实现上述数据结构的过程中&#xff0c;会在源码的角度上对于上述的内容进行特定的…...

夏普比率(Sharpe ratio)​

具有投资常识的人都明白&#xff0c;投资光看收益是不够的&#xff0c;还要看承受的风险&#xff0c;也就是收益风险比。 夏普比率描述的正是这个概念&#xff0c;即每承受一单位的总风险&#xff0c;会产生多少超额的报酬。 用数学公式描述就是&#xff1a; 其中&#xff1…...

【优选算法】模拟 问题算法

​一&#xff1a;替换所有的问号 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0; i < n; i){if(s[i] ?){for(char ch a; ch < z; ch){if((i0 && ch !s[i1]) || (in-1 && ch ! s[i-1]) || ( i>0 &&…...

Flask+LayUI开发手记(八):通用封面缩略图上传实现

前一节做了头像上传的程序&#xff0c;应该说&#xff0c;这个程序编写和操作都相当繁琐&#xff0c;实际上&#xff0c;头像这种缩略图在很多功能中都会用到&#xff0c;屏幕界面有限&#xff0c;绝不会给那么大空间摆开那么大一个界面&#xff0c;更可能的处理&#xff0c;就…...

低代码采购系统搭建:鲸采云+能源行业订单管理自动化案例

在能源行业数字化转型浪潮下&#xff0c;某大型能源集团通过鲸采云低代码平台&#xff0c;仅用3周时间就完成了采购订单管理系统的定制化搭建。本文将揭秘这一成功案例的实施路径与关键成效。 项目背景与挑战 该企业面临&#xff1a; 供应商分散&#xff1a;200供应商使用不同…...

android关于pthread的使用过程

文章目录 简介代码流程pthread使用hello_test.cppAndroid.bp 编译过程报错处理验证过程 简介 android开发经常需要使用pthread来编写代码实现相关的业务需求 代码流程 pthread使用 需要查询某个linux函数的方法使用&#xff0c;可以使用man 函数名 // $ man pthread_crea…...

Faiss vs Milvus 深度对比:向量数据库技术选型指南

Faiss vs Milvus 深度对比&#xff1a;向量数据库技术选型指南 引言&#xff1a;向量数据库的时代抉择 在AI应用爆发的今天&#xff0c;企业和开发者面临着如何存储和检索海量向量数据的重大技术选择。作为当前最受关注的两大解决方案&#xff0c;Faiss和Milvus代表了两种不同…...

慢慢欣赏linux 之 last = switch_to(prev, next)分析

last switch_to(prev, next); 为什么需要定义last作为调用switch_to之前的prev的引用 原因如下&#xff1a; struct task_struct * switch_to(struct task_struct *prev,struct task_struct *next) {... ...return cpu_switch_to(prev, next);> .global cpu_switch_tocpu_…...

如何用 HTML 展示计算机代码

原文&#xff1a;如何用 HTML 展示计算机代码 | w3cschool笔记 &#xff08;请勿将文章标记为付费&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; 在编程学习和文档编写过程中&#xff0c;清晰地展示代码是一项关键技能。HTML 作为网页开发的基础语言&#x…...

2025年ESWA SCI1区TOP,自适应学习粒子群算法AEPSO+动态周期调节灰色模型,深度解析+性能实测

目录 1.摘要2.粒子群算法PSO原理3.改进策略4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流 1.摘要 能源数据的科学预测对于能源行业决策和国家经济发展具有重要意义&#xff0c;尤其是短期能源预测&#xff0c;其精度直接影响经济运行效率。为了更好地提高预测模型…...

LeetCode - 53. 最大子数组和

目录 题目 Kadane 算法核心思想 Kadane 算法的步骤分析 读者可能的错误写法 正确的写法 题目 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; Kadane 算法核心思想 定义状态变量: currentSum: 表示以当前元素为结束的子数组的最大和。 maxSum: 记录全局最大…...

稻米分类和病害检测数据集(猫脸码客第237期)

稻米分类图像数据集&#xff1a;驱动农业智能化发展的核心资源 引言 在全球农业体系中&#xff0c;稻米作为最关键的粮食作物之一&#xff0c;其品种多样性为人类饮食提供了丰富选择。然而&#xff0c;传统稻米分类方法高度依赖人工经验&#xff0c;存在效率低、主观性强等缺…...

DOM(文档对象模型)深度解析

DOM(文档对象模型)深度解析 DOM 是 HTML/XML 文档的树形结构表示,提供了一套让 JavaScript 动态操作网页内容、结构和样式的接口。 一、DOM 核心概念 1. 节点(Node)类型 类型值说明示例ELEMENT_NODE1元素节点<div>, <p>TEXT_NODE3文本节点元素内的文字COMMEN…...