JADE/PUG là một template engine cực kỳ mạnh được phát triển với ý tưởng dựa trên Haml. Thực thi cùng với JavaScript và NodeJS. Thay đổi hoàn toàn cách viết HTML với những cú pháp hoàn toàn mới và tức nhiên sẽ giải quyết những vấn đề mà HTML không để làm được. Dù mới nhưng không có nghĩa nó sẽ rất khó để có thể đọc và hiểu, trong khi phương châm của các lập trình viên ngày nay là “Write less, do more” và JADE/PUG đã làm được điều đó. Với JADE/PUG, bạn sẽ code HTML một cách nhanh hơn và sạch hơn.
Dự án ban đầu được mang tên là “JADE” một cái tên rất đẹp “Ngọc Bitch”, tuy nhiên cái tên JADE là bị đụng bản quyền với một công ty phần mềm lớn. Sau khi trao đổi với các dev và maintainer thì cái tên “PUG” (Chó mặt xệ) được ra đời. Và tất cả các bản release sau đều đổi thành PUG với cú pháp mạnh mẽ, linh hoạt và rõ ràng hơn JADE.
Yêu cầu: NodeJS
npm install -g pug pug-cli
Tạo một file index.pug như sau:
doctype html *html(lang="en") **head ***title Index **body ***h1 Hello World
Sau đó mở command lên chạy lệnh
pug index.pug -p
Kết quả
[!DOCTYPE html] *[html lang="en"] **[head] ***[title]Index[/title] **[/head] **[body] ***[h1]Hello World[/h1] **[/body] *[/html]
JADE/PUG khá là nhạy cảm với indent là tab hay space, tab thì tab hết còn space thì là space hết (space có thể 2-space hoặc 4-space).
Bạn có thể compile bằng CMD như cách ở trên tuy nhiên trên thực tế khi làm project thì chúng ta sẽ sử dụng Node để render hoặc dùng Gulp/Webpack/Grunt ... để compile (tuỳ theo nhu cầu thực tế). Phần này sẽ được nói chi tiết hơn trong bài viết khác.
Cú pháp | Code (*.pug) | Compile (*.html) |
---|---|---|
Comment | // Bao Nguyen p Hello |
|
Unbuffered Comment | //- Bao Nguyen p Hello |
|
Block Comment | // Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam deserunt cumque modi accusamus expedita quis mollitia iste. p Hello |
|
Plain Text | p This is plain old text content. |
|
Attributes | a(href='google.com') Google a#main.abc(href='google.com', class="active") Google | Google Google |
Attributes | - var authenticated = true body(class=authenticated ? 'authed' : 'anon') | [body class="authed"][/body] |
Iteration | ul *each val, index in {1:'one',2:'two',3:'three'} **li= index + ': ' + val |
|
Includes | index.pug doctype html *html **include includes/head.pug **body ***h1 My Site ***p Welcome to my super lame site. ***include includes/foot.pug includes/head.pug head *title My Site *script(src='/js/jquery.js') *script(src='/js/app.js') includes/foot.pug footer#footer *p Copyright (c) foobar | Kết quả [!DOCTYPE html] *[html] **[head] ***[title]My Site[/title] ***[script src="/js/jquery.js"][/script] ***[script src="/js/app.js"][/script] **[/head] **[body] ***[h1]My Site[/h1] ***[p]Welcome to my super lame site.[/p] ***[footer id="footer"] ****[p]Copyright (c) foobar[/p] ***[/footer] **[/body] *[/html] |