在 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.pswp.cn/bicheng/83713.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83713.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83713.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Android基礎回顧】四:ServiceManager

Android 中的 ServerManager 是 Android 框架中一個用于管理系統服務的核心機制。它是 Binder IPC 的一部分&#xff0c;用于在客戶端和服務端之間建立聯系&#xff0c;廣泛應用于系統服務&#xff08;如 ActivityManager、WindowManager 等&#xff09;的注冊與獲取。 1 Serv…

【Android基礎回顧】一:Binder機制是什么?有什么用?

Android中的Binder機制是Android系統中最核心和最基礎的進程間通訊機制。 1 什么是進程間通訊機制(IPC)&#xff1f; 眾所周知&#xff0c;Android系統基于Linux開發&#xff0c;Linux系統里面本來就有進程間通訊機制。 1.1 Linux的IPC(Inter-Process Communication)概覽 它…

Go語言爬蟲系列教程5:HTML解析技術以及第三方庫選擇

Go語言爬蟲系列教程5&#xff1a;HTML解析技術以及第三方庫選擇 在上一章中&#xff0c;我們使用正則表達式提取網頁內容&#xff0c;但這種方法有局限性。對于復雜的HTML結構&#xff0c;我們需要使用專門的HTML解析庫。在這一章中&#xff0c;我們將介紹HTML解析技術以及如何…

AtCoder 第408?場初級競賽 A~E題解

A Timeout 【題目鏈接】 原題鏈接:A - Timeout 【考點】 模擬 【題目大意】 長老會在 s 秒后睡去,進過 n 次叫醒,長老最后能否是保持清醒。 【解析】 模擬每一次拍擊叫醒的過程,查看本次時間距上次時間是否大于 s。注意:第一次拍擊叫醒應和 0 秒相減。 【難度】 …

Unity VR/MR開發-VR設備與適用場景分析

視頻講解鏈接&#xff1a;【XR馬斯維】VR/MR設備與適用場景分析&#xff1f;【UnityVR/MR開發教程--入門】_游戲熱門視頻

MyBatis 查詢功能實現全流程

一、創建maven項目 配置好相應的jdk 二、在數據庫建立相應的表格 1.因為Mybatis實際是對sql表的一系列操作&#xff0c;所以我們新建一個數據庫 2.在查詢界面運行下面指令創建一個user表 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(32) NOT NU…

tcp/udp

tcp/udp協議概述 傳輸層協議基本概念 傳輸層協議建立在網絡層和會話層之間&#xff0c;為應用層實體提供端到端的通信功能&#xff0c;確保數據包的順序傳送及數據的完整性。它利用網絡層提供的服務&#xff0c;并通過傳輸層地址&#xff08;端口號&#xff09;提供給高層用戶…

k8s集群安裝坑點匯總

前言 由于使用最新的Rocky9.5,導致kubekey一鍵安裝用不了&#xff0c;退回Rocky8麻煩機器都建好了&#xff0c;決定手動安裝k8s&#xff0c;結果手動安裝過程中遇到各種坑&#xff0c;這里記錄下&#xff1b; k8s安裝 k8s具體安裝過程可自行搜索&#xff0c;或者deepseek; 也…

深入解析 Dotnet-Boxed.Framework:提升 .NET 開發效率的利器

在現代 .NET 開發中&#xff0c;框架和工具的選擇對項目的開發效率和長期維護至關重要。Dotnet-Boxed.Framework 是一個開源框架&#xff0c;旨在簡化開發流程&#xff0c;提高生產力。它通過一組實用的工具和自動化功能&#xff0c;幫助開發者快速構建高質量的應用程序。本文將…

如何輕松地將文件從 PC 傳輸到 iPhone?

傳統上&#xff0c;您可以使用 iTunes 將文件從 PC 傳輸到 iPhone&#xff0c;但現在&#xff0c;使用 iTunes 已不再是唯一的選擇。現在有多種不同且有效的方法可以幫助您傳輸文件。在今天的指南中&#xff0c;您可以找到 8 種使用或不使用 iTunes 傳輸文件的方法&#xff0c;…

Kafka深度解析與原理剖析

文章目錄 一、Kafka核心架構原理1. **分布式協調與選舉**2. **ISR、OSR與HW機制**3. **高性能存儲設計**4. **刷盤機制 (Flush)**5. **消息壓縮算法**二、高可用與消息可靠性保障1. **數據高可用策略**2. **消息丟失場景與規避**3. **順序消費保證**三、Kafka高頻面試題精析1. …

【教學類】20250605立體紙盤(3邊形-22邊形,角度5、10……40,45)

背景需求 在《自助餐》活動中&#xff0c; 【教學類-53-01】20240918自助餐餐盤-CSDN博客文章瀏覽閱讀984次&#xff0c;點贊29次&#xff0c;收藏11次。【教學類-53-01】20240918自助餐餐盤https://blog.csdn.net/reasonsummer/article/details/142340542?spm1011.2415.300…

GC1809:高性能24bit/192kHz音頻接收芯片解析

1. 芯片概述 GC1809 是數字音頻接收芯片&#xff0c;支持IEC60958、S/PDIF、AES3等協議&#xff0c;集成8選1輸入切換、低抖動時鐘恢復和24bit DAC&#xff0c;適用于家庭影院、汽車音響等高保真場景。 核心特性 高精度&#xff1a;24bit分辨率&#xff0c;動態范圍105dB&…

Next.js 中間件鑒權繞過漏洞 CVE-2025-29927

前言:CVE-2025-29927 是一個影響 Next.js 的嚴重漏洞&#xff0c;源于開發者信任了客戶端請求中攜帶的 X-Middleware-Rewrite 頭部字段。攻擊者可以手動構造該頭部&#xff0c;實現繞過中間件邏輯&#xff0c;訪問本應受保護的資源或 API。 影響版本&#xff1a;Next.js < …

第1章 數據分析簡介

第1章 數據分析簡介 1.1 數據分析 當今世界對信息技術依賴日深,每天產生和存儲海量數據,來源于自動檢測系統、傳感器、科學儀器,以及銀行取錢、買東西、寫博客、發微博等日常行為。 數據與信息在形式上不同:數據是無形式可言的字節流,難理解其本質;信息是對數據集處理后…

邊緣計算網關賦能沸石轉輪運行故障智能診斷的配置實例

一、項目背景 在環保行業&#xff0c;隨著國家對大氣污染治理要求的不斷提高&#xff0c;VOCs廢氣處理成為了眾多企業的重要任務。沸石轉輪作為一種高效的VOCs治理設備&#xff0c;被廣泛應用于石油化工、汽車制造、印刷包裝等主流行業。這些行業生產規模大、廢氣排放量多&…

20250602在Ubuntu20.04.6下修改壓縮包的日期和時間

rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 5月 23 10:23 Android13.0地面站.tgz* rootrootrootroot-X99-Turbo:~$ touch 1Android13.0地面站.tgz rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 6月…

windows無法安裝到這個磁盤,選中的磁盤采用gpt分區儀式

解決辦法&#xff1a; 我才用的是一個網友分享的微軟官方解決辦法&#xff0c;成功了&#xff0c;但是不知道會不會i有什么影響。將所有分區刪掉&#xff0c;這時磁盤變成為分配的空間。我個人是兩塊固態&#xff0c;一塊m.2&#xff0c;一塊sata&#xff1b;所以我直接將500g…

使用Composer創建公共類庫

概述 如果多個項目中存在使用相同類庫、模塊的情況&#xff0c;此時可以考慮將類庫或者模塊單獨抽取出來&#xff0c;形成獨立類庫&#xff0c;通過composer 來進行依賴管理&#xff0c;這樣可以更方便維護&#xff0c;大大提升開發效率。 優勢 可以對特定模塊進行統一維護和…

Ubuntu中TFTP服務器安裝使用

TFTP服務器 在 Ubuntu 下使用 TFTP&#xff08;Trivial File Transfer Protocol&#xff09; 服務&#xff0c;通常用于簡單的文件傳輸&#xff08;如網絡設備固件更新、嵌入式開發等&#xff09;。 1 TFTP服務器安裝 sudo apt-get install tftp-hpa sudo apt-get install…