作為網頁設計師或開發人員,我們可能都必須寫出我們的HTML的公平份額。儘管這不是最艱鉅的任務,但通常會感到有些無聊或重複。這是PUG HTML預處理器進來的地方。
>> html也是靜態的,這意味著,如果您要顯示動態數據(例如,從API獲取),您總是會在JavaScript內部得到HTML STINGS的Mishmash。這可能是一次噩夢,要進行調試和維護。 PUG是節點和瀏覽器的模板引擎。它將其編譯為HTML並具有簡化的語法,這可以使您更有生產力,並且代碼更可讀。 PUG使得編寫可重複使用的HTML以及從數據庫或API中獲取的數據很容易。
鑰匙要點
這種方法使您可以重複使用靜態網頁元素,同時根據數據定義動態元素。它還有助於分開關注點,使您的應用程序邏輯與顯示邏輯隔離。 如果您的網站或Web應用程序是數據驅動的,那麼您更有可能從模板引擎中受益- 例如用於管理員工的員工目錄,列出了各種產品供用戶購買的網站或具有動態性的網站搜索功能。
>如果您從API獲取少量數據(在這種情況下,您只需使用JavaScript的本機模板字符串),或者如果您正在製作小型靜態站點。
一點歷史
如果您有興趣了解更多信息,則可以閱讀本Github問題中的原始名稱更改公告。否則,只需確保將“模板”一詞添加到與PUG相關的Google搜索中,以避免結果充滿狗。
>安裝哈巴狗
>在我們寫一些哈巴狗之前,我們需要安裝節點,NPM(與節點捆綁在一起)和任Pug-Cli軟件包。
>安裝節點/npm有幾個選項。要么轉到項目主頁,然後下載適合您的系統的正確二進製文件,或使用NVM等版本管理器。我建議在可能的情況下使用版本管理器,因為這將使您可以安裝不同的節點版本並隨意之間切換。它還將否定一堆潛在的權限錯誤。>在系統上安裝了節點和npm後,您可以像這樣安裝PUG-CLI軟件包:
>您可以通過將哈巴狗鍵入終端來檢查安裝過程是否正確運行。這將輸出PUG的版本和您已安裝的CLI的版本。
>在撰寫本文時,如下所示:
><span>npm i -g pug-cli </span>
>語法在您的編輯器中突出顯示
如果您的編輯器不提供PUG的語法突出顯示,那麼尋找擴展程序以添加此功能是個好主意。
$ pug <span>--version </span>pug version: <span>2.0.3 </span>pug-cli version: <span>1.0.0-alpha6 </span>>我目前正在使用Sublime Text 3,並且在開箱即用,這就是.pug文件的外觀:
為了解決這個問題,可以安裝崇高的哈巴狗軟件包:
>語法突出顯示將使使用哈巴狗文件,尤其是任何長度的文件。
>嘗試pug html而不安裝
html ,然後選擇pug作為預處理器。這將使您可以將哈巴索代碼輸入HTML窗格,並看到結果實時出現。 > 作為額外的獎勵,您可以單擊HTML窗格中的向下箭頭,然後選擇“>”視圖編譯的HTML
查看Pug已生成的標記。>
開始這件事,打開Pug-examples目錄中的終端,然後輸入以下內容:<span>npm i -g pug-cli </span>
您應該看到類似以下內容:
>注意:在上面的命令中,-w選項代表觀看,點告訴Pug,請注意當前目錄中的所有內容,-o ./html告訴PUG在HTML目錄中輸出其HTML, - p選項會使輸出。
>
現在,讓我們從上面的屏幕截圖創建頁面(關於缺乏語法突出顯示的內容)。將以下內容輸入index.pug:$ pug <span>--version </span>pug version: <span>2.0.3 </span>pug-cli version: <span>1.0.0-alpha6 </span>>
>保存pug.index,然後檢查./html/index.html的內容。您應該看到以下內容:
<span>mkdir -p pug-examples/html </span><span>cd pug-examples </span><span>touch index.pug </span>
還不錯,是嗎?哈巴狗CLI將我們的哈巴狗檔案列為常規html。
上面的代碼產生以下內容:
pug <span>-w . -o ./html -P </span>>
現在採用此代碼:
watching index.pug rendered /home/jim/Desktop/pug-examples/html/index.html
這會產生以下內容:
>
<span>doctype html </span><span>html<span><span>(lang=<span>'en'</span>)</span></span> </span> <span>head </span> <span>title Hello, World! </span> <span>body </span> <span>h1 Hello, World! </span> <span>div<span>.remark</span> </span> <span>p Pug rocks! </span>>您使用哪種凹痕(如果需要的話,甚至可以使用選項卡)並不重要,但是強烈建議您保持凹痕層面的水平一致。在本文中,我將使用兩個空間。
>其次,哈巴狗沒有任何關閉標籤。顯然,這將為您節省一些鍵盤,並為帕格提供乾淨,易於閱讀的語法。
>現在我們已經有了一些基本的哈巴狗的處理方法,讓我們快速瀏覽其語法。如果其中任何一個似乎令人困惑,或者您想更深入地走,請務必諮詢該項目的出色文檔。
> Doctype>
>標籤如前所述,哈巴狗沒有任何關閉標籤,並且依賴於嵌套的凹痕。這可能需要少量習慣,但是一旦這樣做,它就會制定乾淨可讀的代碼。以示例為例:
>
<span>npm i -g pug-cli </span>請注意,Pug足夠聰明,可以關閉我們的任何自關閉標籤(例如元素)。
>
類,ID和屬性$ pug <span>--version </span>pug version: <span>2.0.3 </span>pug-cli version: <span>1.0.0-alpha6 </span>使用.className和#idname表示法表示
類和ID。例如:
這兩個都編譯為:
<span>mkdir -p pug-examples/html </span><span>cd pug-examples </span><span>touch index.pug </span>
>使用括號添加屬性:
pug <span>-w . -o ./html -P </span>
這將導致以下結果:
watching index.pug rendered /home/jim/Desktop/pug-examples/html/index.html
>關於屬性還有很多要說的。例如,您可以使用JavaScript將變量包含在您的屬性中,也可以將值數組分配給屬性。我們將繼續在下一節中使用JavaScript。
<span>doctype html </span><span>html<span><span>(lang=<span>'en'</span>)</span></span> </span> <span>head </span> <span>title Hello, World! </span> <span>body </span> <span>h1 Hello, World! </span> <span>div<span>.remark</span> </span> <span>p Pug rocks! </span>純文本和文本塊
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Hello, World!<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h1</span>></span>Hello, World!<span><span></h1</span>></span> </span> <span><span><span><div</span> class<span>="remark"</span>></span> </span> <span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
>另一種方法是將管子字符(|)的線上置為前綴:
>處理大量文本時,您可以只是一個點。在標籤名稱之後或關閉括號之後,如果標籤具有屬性:
><span>div<span>.remark</span> </span> <span>p Pug rocks!! </span>
這將導致:
<span><span><span><div</span> class<span>="remark"</span>></span> </span> <span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span><span><span><span></div</span>></span> </span>
>評論
<span>div<span>.remark</span> </span><span>p Pug rocks!! </span>>最後,可以添加評論:
<span><span><span><div</span> class<span>="remark"</span>></span><span><span></div</span>></span> </span><span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span>此評論將添加到渲染的HTML:
<span>nav </span> <span>navbar-default div </span> <span>h1 My Website! </span> <span>ul </span> <span>li </span> <span>a Home </span> <span>li </span> <span>a Page 1 </span> <span>li </span> <span>a Page 2 </span> <span>input </span>
>評論必須出現在自己的行上。在這裡,該評論將被視為純文本:
<span><span><span><nav</span>></span> </span> <span><span><span><div</span>></span> </span> <span><span><span><h1</span>></span>My Website!<span><span></h1</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span><ul</span>></span> </span> <span><span><span><li</span>></span><span><span><a</span>></span>Home<span><span></a</span>></span><span><span></li</span>></span> </span> <span><span><span><li</span>></span><span><span><a</span>></span>Page 1<span><span></a</span>></span><span><span></li</span>></span> </span> <span><span><span><li</span>></span><span><span><a</span>></span>Page 2<span><span></a</span>></span><span><span></li</span>></span> </span> <span><span><span></ul</span>></span> </span> <span><span><span><input</span>/></span> </span><span><span><span></nav</span>></span> </span>
多行論也是可能的:
<span>nav<span>#navbar-default</span> </span> <span>div<span>.container-fluid</span> </span> <span>h1<span>.navbar-header</span> My Website! </span>>
<span>npm i -g pug-cli </span>
>您可以找到一個自舉風格的佈局的演示,該佈局演示了我們到目前為止討論的技術:
>請參閱sitepoint(@sitepoint)
codepen。
在PUG HTML模板中使用JavaScript
>這是在使用JavaScript中使用JavaScript之前要注意的一個重要區別。
>
上面的代碼對此進行了編譯:
>$ pug <span>--version </span>pug version: <span>2.0.3 </span>pug-cli version: <span>1.0.0-alpha6 </span>
出於安全原因,緩衝代碼被HTML逃脫了。
<span>mkdir -p pug-examples/html </span><span>cd pug-examples </span><span>touch index.pug </span>上面的代碼對此進行了編譯:
>
pug <span>-w . -o ./html -P </span>插值
>字符串插值是在具有相應值的模板中替換一個或多個佔位符的過程。正如我們剛剛看到的那樣,緩衝輸入提供了一種這樣做的方法。另一個正在使用#{}。在這裡,PUG將評估捲曲括號之間的任何代碼,逃脫它並將其渲染到模板中。
watching index.pug rendered /home/jim/Desktop/pug-examples/html/index.html
上面的代碼對此進行了編譯:
<span>doctype html </span><span>html<span><span>(lang=<span>'en'</span>)</span></span> </span> <span>head </span> <span>title Hello, World! </span> <span>body </span> <span>h1 Hello, World! </span> <span>div<span>.remark</span> </span> <span>p Pug rocks! </span>>
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Hello, World!<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h1</span>></span>Hello, World!<span><span></h1</span>></span> </span> <span><span><span><div</span> class<span>="remark"</span>></span> </span> <span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>此編譯為:
<span>div<span>.remark</span> </span> <span>p Pug rocks!! </span>>也可以使用! {}將Unscaped值渲染到模板中。但這不是最好的主意,如果輸入來自不受信任的來源。
>
注意:當要為元素屬性中的變量中持有的值分配時,您可以省略#{}。例如:img(alt = name)。<span><span><span><div</span> class<span>="remark"</span>></span> </span> <span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span><span><span><span></div</span>></span> </span>
迭代
<span>div<span>.remark</span> </span><span>p Pug rocks!! </span>
pug的每個關鍵字使得可以輕鬆迭代陣列:
這將導致以下結果:
您也可以將其用於迭代對像中的鍵:
<span><span><span><div</span> class<span>="remark"</span>></span><span><span></div</span>></span> </span><span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span>pug還允許您提供一個其他塊,如果數組或對象為空,將執行該塊:
>
<span>nav </span> <span>navbar-default div </span> <span>h1 My Website! </span> <span>ul </span> <span>li </span> <span>a Home </span> <span>li </span> <span>a Page 1 </span> <span>li </span> <span>a Page 2 </span> <span>input </span>最後,請注意,您可以用作每個的別名。
條件
根據JavaScript表達式的結果,有條件提供了一種非常方便的呈現不同HTML的方法<span>npm i -g pug-cli </span>
在此示例中,我們正在檢查員工對像是否具有Extn屬性,然後輸出該屬性的值(如果存在)或文本“ N/A”。
> javaScript在哈巴狗演示中 在下面,您可以找到我們本節中討論的一些技術的演示。這比以前的演示更大的好處展示了帕格的好處,因為我們要添加更多員工所需要做的就是在我們的SitePointEmploines Employees Array中添加更多對象。一個動手示例
>現在,我們對Pug的語法及其運作方式有一個合理的想法,讓我們通過構建一個小型Express.js應用程序來結束,以演示一些Pug的更高級功能。
>
>下一步在Pug-Express文件夾中創建一個app.js文件:
然後添加以下內容:
>在這裡,我們宣布一條路線(/),該路線將響應帶有文本“ Hello,World!”的Get請求。我們可以通過node app.js啟動服務器,然後訪問http:// localhost:3000。
如果您看到這樣的東西,那麼事情就已經計劃了:>
$ pug <span>--version </span>pug version: <span>2.0.3 </span>pug-cli version: <span>1.0.0-alpha6 </span>
添加一些數據
<span>mkdir -p pug-examples/html </span><span>cd pug-examples </span><span>touch index.pug </span>
這個Express App不會做任何壯觀的事情。我們將構建一個簡單的員工目錄,該目錄從數據庫中獲取員工列表,並將其顯示在表格中。為此,我們需要一個數據庫和一些數據。
> 但是,對於這個小示例,安裝和配置數據庫的安裝和配置有點沉重,因此我將使用一個稱為JSON服務器的軟件包。這將使我們能夠創建一個db.json文件,它將變成一個REST API,我們可以對此進行CRUD操作。pug <span>-w . -o ./html -P </span>>讓我們安裝它:
現在在項目的根部創建上述db.json文件:
最後,我們需要一些JSON來填充它。我們將使用隨機用戶生成器,該生成器是一個免費的開源API,用於生成隨機用戶數據。 25個人應該為我們的示例做,因此請轉到https://randomuser.me/api/?Results=25,然後將結果復製到db.json。 >
>最後,在第二個終端窗口中啟動服務器:
<span>npm i -g pug-cli </span>
這將導致JSON服務器在端口3001上啟動並觀看我們的數據庫文件以進行更改。
>將哈巴狗設置為模板引擎然後,在app.js中,我們需要告訴Express使用pug:
接下來,創建一個視圖目錄,然後在“視圖目錄”中添加index.pug文件:
$ pug <span>--version </span>pug version: <span>2.0.3 </span>pug-cli version: <span>1.0.0-alpha6 </span>
>在該文件中添加一些內容:
<span>mkdir -p pug-examples/html </span><span>cd pug-examples </span><span>touch index.pug </span>
然後像這樣更改app.js:
pug <span>-w . -o ./html -P </span>
最後,重新啟動節點服務器,然後刷新您的瀏覽器,您應該看到以下內容:
watching index.pug rendered /home/jim/Desktop/pug-examples/html/index.html
<span>doctype html </span><span>html<span><span>(lang=<span>'en'</span>)</span></span> </span> <span>head </span> <span>title Hello, World! </span> <span>body </span> <span>h1 Hello, World! </span> <span>div<span>.remark</span> </span> <span>p Pug rocks! </span>就是這樣。你很好。
>
構建員工目錄
>列表上的下一個任務是將一些數據交給哈巴狗模板以顯示。為此,我們需要一種從JSON服務器中獲取數據的方法。不幸的是,fetch API不是在節點中實現的,所以讓我們使用流行的HTTP客戶端Axios:
然後像這樣更改app.js:
>
然後,我們像以前一樣渲染索引,但是這次我們將其傳遞給包含所有數據的字面物體。
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Hello, World!<span><span></title</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h1</span>></span>Hello, World!<span><span></h1</span>></span> </span> <span><span><span><div</span> class<span>="remark"</span>></span> </span> <span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>注意:每次更改app.js時,您都必須重新啟動節點服務器。如果這開始變得煩人,請查看Nodemon,這將為您做。
現在是哈巴狗。更改index.pug看起來如下:
<span>div<span>.remark</span> </span> <span>p Pug rocks!! </span>
>希望這裡發生並不奇怪。我們正在使用Smantic-UI-CSS進行某種樣式,以及我們自己的幾種樣式。 然後,在桌子主體中,我們正在迭代我們從app.js傳遞的一系列員工,然後將其詳細信息輸出到表中。
頁面底部的是我們版權要求和當年的頁腳。
如果您現在刷新頁面,則應該看到此信息:>
模板繼承
<span><span><span><div</span> class<span>="remark"</span>></span> </span> <span><span><span><p</span>></span>Pug rocks!!<span><span></p</span>></span> </span><span><span><span></div</span>></span> </span>>這已經很不錯了,但是要解決問題,我將演示如何隨著項目的增長而提供最大的靈活性。
。
>讓我們從“ views”目錄中創建一個layout.pug文件開始然後添加以下內容:
我們在這裡完成的是創建一個佈局文件,而不是通過項目中的其他哈巴狗文件擴展。當您有大量的哈巴狗文件時,這會節省大量的代碼。
>>這種工作的方法是,我們定義了孩子模板可以替換的兩個內容(塊內容和塊塊)。對於頁腳塊,我們還定義了一些後備內容,如果兒童模板不重新定義此塊,這些內容將呈現。
>>現在我們可以告訴我們的index.pug文件以從我們的佈局繼承:
><span>npm i -g pug-cli </span>
結果與我們以前相同,但是代碼現在具有更好的結構。
> Mixins>
>在“視圖文件夾”中創建一個稱為Mixins的文件夾,在該文件夾中創建一個名為_tablerow.pug的文件:使用Mixin關鍵字聲明
$ pug <span>--version </span>pug version: <span>2.0.3 </span>pug-cli version: <span>1.0.0-alpha6 </span>> Mixins。它們被彙編為功能,可以進行論證。將以下內容添加到視圖/mixins/_tablerow.pug:
>
<span>mkdir -p pug-examples/html </span><span>cd pug-examples </span><span>touch index.pug </span>現在更改index.pug so:
如您所見,我們正在將Mixin導入文件頂部。然後,我們通過將其名稱與加號符號前綴並傳遞給我們的員工對像以顯示。
pug <span>-w . -o ./html -P </span>這對於我們的小應用程序來說是過度的,但是它演示了PUG的一個非常有用的功能,該功能使我們能夠編寫可重複使用的代碼。
結論
如果您做得這麼遠,就做得很好!我們在本教程中涵蓋了很多基礎。我們研究了安裝PUG,其基本語法,其JavaScript支持以及迭代和有條件渲染的構造。最後,我們構建了一個功能齊全的Express App,該應用程序從遠程源中汲取數據並將其饋送到哈巴狗模板中。。
> pug還有很多事情可以做。我鼓勵您查看其出色的文檔,並開始在項目中使用它。您也可以將其與幾個現代JS框架(例如React或Vue)一起使用,甚至已將其移植到其他幾種語言中。關於哈停html模板預處理器的常見問題
以下是一些關於哈巴狗的常見問題。什麼是PUG HTML模板預處理器?它通過提供更簡潔和表現力的語法來簡化和增強編寫HTML的過程。 為什麼使用pug代替HTML?
pug提供了與傳統HTML相比的更緊湊,更可讀的語法。它允許基於凹痕的結構化,這通常會導致更清潔,更有條理的代碼。哈巴狗還支持變量,混合素,並包括使模板創建更有效。
>使用PUG是否有任何限製或缺點?
> PUG提供了許多優勢,但其主要限制是如果您習慣了傳統的HTML,則學習曲線。此外,在團隊中,並非每個人都熟悉PUG可能需要進行一些調整。>我可以將pug與諸如react或angular之類的前端框架中使用嗎?
> PUG主要是為生成HTML而設計的,但可以與各種前端框架一起使用,例如React,Angular或Vue.js。但是,使用這些框架使用哈巴狗可能需要其他配置和工具。>我可以在同一項目中將常規HTML與PUG混合嗎?
是的,您可以輕鬆地將PUG模板與同一項目中的常規HTML文件一起集成。從一種格式過渡到另一種格式或使用不同方法與開發人員進行合作時,這很有幫助。如何安裝和設置PUG?
要使用哈巴狗,您需要安裝名為“ pug”的node.js軟件包。您可以在項目中在全球或本地安裝它。安裝後,您可以開始使用.PUG文件擴展名創建PUG模板。以上是帕格HTML模板引擎:初學者指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!