Pug как установить: Установка | HTML: Препроцессор Pug
Содержание
Установка | HTML: Препроцессор Pug
Как и с препроцессором SASS, для использования Pug используется интерпретатор — программа или скрипт, который переводит шаблон Pug в HTML. В этом курсе будет использован npm-пакет pug-cli
, который позволит компилировать файлы с помощью командной строки. Это похоже на использование пакета sass
из курса SASS: Основы.
Для установки интерпретатора Pug воспользуйтесь пакетом pug-cli
:
npm install pug-cli
Вы можете установить пакет в конкретную директорию, или глобально, если использовать флаг -g
при установке. Чтобы узнать версию установленного пакета, введите команду pug --version
. На момент написания курса используется следующая версия:
pug version: 2.0.4
pug-cli version: 1.0.0-alpha6
Первый шаблон
Разберём работу интерпретатора. Для этого создадим файл index.pug со следующим содержимым:
doctype html
html(lang='ru')
head
meta(charset='UTF-8')
meta(name='viewport' content='width=device-width, initial-scale=1.0')
meta(rel='icon' type='image/x-icon' href='favicon.ico')
title Мой первый Pug-шаблон
link(rel='stylesheet' href='./styles/app.css')
body
h2 Шаблон Pug
p
| Мой первый шаблон с использованием Pug.
| Он позволит мне удобнее верстать страницы.
Даже если вы впервые видите Pug разметку, то без труда разберёте, что тут происходит. Это важно, так как снижает порог входа для людей, знакомых с синтаксисом HTML.
Настало время скомпилировать этот код. Для этого достаточно указать команду pug
и передать путь к файлу, который нужно скомпилировать. Если не указывать других опций, то файл будет автоматически скомпилирован под тем же именем и в той же директории.
pug index.pug --pretty
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta rel="icon" type="image/x-icon" href="favicon.ico">
<title>Мой первый Pug-шаблон</title>
<link rel="stylesheet" href="./styles/app.css">
</head>
<body>
<h2>Шаблон Pug</h2>
<p>
Мой первый шаблон с использованием Pug.
Он позволит мне удобнее верстать страницы.
</p>
</body>
</html>
По умолчанию, pug переводит код в минимизированный HTML. Из него вырезаны пробелы между тегами, табуляция и перевод строк. Это удобно при разработке, но, во время обучения, важно видеть полный результат без минификации. Для этого используется опция --pretty
. Если вы уверены в коде, то просто уберите её.
В разработке скомпилированные файлы зачастую располагаются отдельно от исходных файлов. Это удобно, так как разработка ведётся в одной директории, а файлы после компиляции, которые пойдут на сервер, находятся в другой директории. В pug-cli
для этого используется флаг -o
после которого указывается путь к директории, куда должен компилироваться файл.
pug index.pug --pretty -o ./build/
Во время разработки удобно компилировать файлы после каждого сохранения. Для этого используется флаг -w
. После этого процесс постоянно будет следить за файлом и компилировать его в случае изменений. Итого, ваши учебные проекты могут иметь следующий вид:
pug index.pug --pretty -w -o ./build/
Если изначально вам не очень удобно ориентироваться в таких флагах, то можно использовать их полные названия:
pug index.pug --pretty --watch --out ./build/
Полный список команд можно вывести с помощью команды pug --help
.
Дополнительное задание
Как установить и использовать Jade
Недавно я смотрел несколько видеоуроков по youtube и наткнулся на эту штуку JADE, как мне установить и использовать ее для моей веб-разработки?
Я погуглил его, но не нашел подходящего сайта, который учил бы step-by-step продолжать. А сайт jade-lang.com недоступен. Я сделал это с веб-сайтов, но node.js выдает некоторые ошибки. скриншот ниже:
node.js
web
pug
Поделиться
Источник
Shree
23 июля 2017 в 19:48
2 ответа
- Как установить пустой атрибут с помощью Jade?
При использовании jade , AngularJs и angular-translate я предпочитаю использовать директиву translate в качестве пустого атрибута. Но по какой-то причине, используя пустые атрибуты в Jade, вместо того , чтобы получить что-то вроде <tag translate OR <tag translate=» , я получаю <tag…
- Как использовать JADE для создания агента для поиска веб-сервисов
Впервые я услышал о JADE много месяцев назад, но так и не получил возможности попробовать его. Я сделал простой поиск в google, чтобы узнать, как используется JADE. Я получил это , и с тех пор мне действительно хотелось узнать гораздо больше о JADE. В настоящее время мне дали проект по созданию…
2
first
jade устарел, а новое имя для jade-pug для получения дополнительной информации об этом проверьте эту ссылку
pug документация
second
to install pug write this command npm install pug -g
after you install pug create a new folder to your project and create a file inside your project file.pug
and right click
on your folder project + shift
and open command window here
and write this command pug file.pug
after you write this command it will generate a new file file.html
Third
write this command pug input.pug input.html --watch --pretty
--watch
to compile your code after saving in file.pug
--pretty
to write a code with format of html(organized code) not minimized code
для записи тега в pug напишите имя тега, например
html
tag and we will compile to<html></html>
a(href='#' target='_blank') link
compile to<a href="#" target="_blank">link</a>
a(href='#' target=''): img(src='' alt='')
скомпилировать в<a href="#" target=""><img src="" alt=""/></a>
- чтобы написать комментарий от
// this is a comment
до<!-- this is a comment -->
- чтобы написать имя класса и содержимое для тега, например
p.demo this is a paragraph
, скомпилируйте в<p> this is a paragraph</p>
- для записи идентификатора и содержимого тега, например
p#demo this is a paragraph
, скомпилируйте в<p> this is a paragraph</p>
чтобы написать функцию
mixin list
ul
li foo
li bar
li baz
чтобы использовать эту функцию, напишите имя функции +list
и скомпилируйте ее в
<ul>
<li>foo</li>
<li>bar</li>
<li>baz</li>
</ul>
чтобы включить запись файла include file_name
Наконец, это пример кода pug
html
head
title Hello
link(href='' rel='stylesheet' type='text/css')
body
//this is a comment
p.item hello
p#item
br/
a(href='#' target=''): img(src='' alt='')
// to start a new line
|
|
a(href='google.com') Google
// write a function
mixin list
ul
li foo
li bar
li baz
// use function
+list
// include file
include content
Для получения дополнительной информации о pug проверьте эту ссылку pug полная документация
Поделиться
Eng_Farghly
24 июля 2017 в 19:56
1
Джейд теперь называется «pug».
npm установить pug -g
Здесь вы найдете, как его использовать, если прокрутите вниз:
https://www.npmjs.com/пакет/pug
Поделиться
sidewinder
23 июля 2017 в 20:23
Похожие вопросы:
node.js/Jade-как предварительно скомпилировать файлы jade и кэшировать их?
Каркас: node.js / express.js / Нефрит Вопрос: в production env, когда файл jade визуализируется express, jade cache-это он, поэтому будущие рендеры выполняются быстрее. Когда я запускаю приложение…
Как я могу добавить JADE к Eclipse и сделать программу с помощью JADE?
Я хочу программировать в нефрите в первый раз. Как я могу добавить JADE в eclipse и использовать его? Я хочу добавить JADE к eclipse, но не могу добавить его в библиотеки в Eclipse.
Как установить поддержку языка Jade в Atom
Я использую Atom и хотел бы создавать с его помощью все свои новые приложения. Однако я замечаю, что Atom не поддерживает Jade. Я гуглил, и все, что я понял, это о пакете….
Как установить пустой атрибут с помощью Jade?
При использовании jade , AngularJs и angular-translate я предпочитаю использовать директиву translate в качестве пустого атрибута. Но по какой-то причине, используя пустые атрибуты в Jade, вместо…
Как использовать JADE для создания агента для поиска веб-сервисов
Впервые я услышал о JADE много месяцев назад, но так и не получил возможности попробовать его. Я сделал простой поиск в google, чтобы узнать, как используется JADE. Я получил это , и с тех пор мне…
Как использовать Macromedia Flash в Jade?
Я хочу использовать Macromedia Flash в своем шаблоне Jade, поддерживает ли Jade Flash?
Пытаюсь понять, как использовать Jade с Node.js
Я новичок в node, просто пытаюсь использовать Jade template engine, я прочитал ReadMe на странице github, и в итоге у меня возникла идея, что это должно сработать: var http = require(‘http’), jade =…
как использовать ejs и jade в одном проекте nodejs & express?
Я хочу использовать ejs для партиалов и использовать jade для отдельных страниц, как использовать и то, и другое в одном проекте NodeJS & express?
Jade template engine / Как установить фоновое изображение
Я хотел бы установить фоновое изображение на мою страницу HTML, визуализированную с помощью Jade . Кто-нибудь знает, как этого добиться? Спасибо
Как установить basedir в Jade с помощью командной строки
Есть ли способ установить параметр ‘basedir’ в командной строке jade? Или, может быть, другой способ использовать там абсолютный патч. Спасибо.
Туториал по HTML препроцессору Pug (Jade) · GitHub
Pug — это препроцессор HTML и шаблонизатор, который был написан на JavaScript для Node.js.
Содержание:
- Теги
- Текст
- Атрибуты
- Констуркция Switch Case
- Циклы
- Вставка JavaScript кода
- Комментарии
- Условия
- Тип документа
- Инклюды (Includes)
- Наследование шаблонов
- Интерполяция переменных
- Миксины
- Многострочный ассоциативный массив
Официальная документация по Pug
Теги
В Pug нет закрывающих тегов, вместо этого он использует строгую табуляцию (или отступы) для определения вложености тегов.
Для закрытия тегов в конце необходимо добавить символ /
: foo(bar='baz')/
Pug
ul li Item A li Item B li Item C
HTML
<ul> <li>Item A</li> <li>Item B</li> <li>Item C</li> </ul>
Текст
Непосредственно в Pug можно вставлять элементы в HTML синтаксисе
Pug
p This is plain old <em>text</em> content.
HTML
<p>This is plain old <em>text</em> content.</p>
Pug
p | The pipe always goes at the beginning of its own line, | not counting indentation.
HTML
<p>The pipe always goes at the beginning of its own line, not counting indentation.</p>
Атрибуты
В Pug можно встраивать JavaScript код, благодаря чему возможны конструкции показанные ниже.
Pug
a(href='google.com') Google | | a(class='button' href='google.com') Google | | a(class='button', href='google.com') Google
HTML
<a href="google.com">Google</a> <a href="google.com">Google</a> <a href="google.com">Google</a>
Pug
- var authenticated = true body(class=authenticated ? 'authed' : 'anon')
HTML
<body></body>
Pug
input( type='checkbox' name='agreement' checked )
HTML
<input type="checkbox" name="agreement" checked="checked" />
Pug
- var url = 'pug-test.html'; a(href='/' + url) Link | | - url = 'https://example.com/' a(href=url) Another link
HTML
<a href="/pug-test.html">Link</a> <a href="https://example.com/">Another link</a>
Pug
- var classes = ['foo', 'bar', 'baz'] a(class=classes) | | //- the class attribute may also be repeated to merge arrays a.bang(class=classes class=['bing'])
HTML
<a></a> <a></a>
Констуркция Switch Case
Pug поддерживает switch case, которая представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.
Pug
- var friends = 10 case friends when 0 p you have no friends when 1 p you have a friend default p you have #{friends} friends
HTML
<p>you have 10 friends</p>
Циклы
Pug
ul each val, index in ['zero', 'one', 'two'] li= index + ': ' + val
HTML
<ul> <li>0: zero</li> <li>1: one</li> <li>2: two</li> </ul>
Pug
- var values = []; ul each val in values li= val else li There are no values
HTML
<ul> <li>There are no values</li> </ul>
Pug
- var n = 0; ul while n < 4 li= n++
HTML
<ul> <li>0</li> <li>1</li> <li>2</li> <li>3</li> </ul>
Вставка JavaScript кода
Pug поддерживает вставку частей JavaScript кода в шаблоны.
Не буфферизированный код начинается с символа -
Pug
- for (var x = 0; x < 3; x++) li item
HTML
<li>item</li> <li>item</li> <li>item</li>
Буфферизированный код начинается с символа =
Pug
p = 'This code is <escaped>!'
HTML
<p>This code is <escaped>!</p>
Комментарии
Существуют различные комментариев: те, которые будут отображаться после компиляции, и те, которые пропадут.
Pug
// just some paragraphs //- will not output within markup p foo p bar
HTML
<!-- just some paragraphs--> <p>foo</p> <p>bar</p>
Pug
body //- Comments for your template writers. Use as much text as you want. // Comments for your HTML readers. Use as much text as you want.
HTML
<body> <!--Comments for your HTML readers. Use as much text as you want.--> </body>
Условия
Pug
- var user = { description: 'foo bar baz' } - var authorised = false #user if user.description h3.green Description p.description= user.description else if authorised h3.blue Description p.description. User has no description, why not add one... else h3.red Description p.description User has no description
HTML
<div> <h3>Description</h3> <p>foo bar baz</p> </div>
Тип документа
Pug
HTML
Инклюды (Includes)
Pug имеет возможность вставки содержимого одного файла в другой файл Pug.
Pug
//- index.pug doctype html html head style include style.css body h2 My Site p Welcome to my super lame site. script include script.js
CSS
/* style.css */ h2 { color: red; }
JavaScript
// script.js console.log('You are awesome');
HTML
<!DOCTYPE html> <html> <head> <style> /* style.css */ h2 { color: red; } </style> </head> <body> <h2>My Site</h2> <p>Welcome to my super lame site.</p> <script> // script.js console.log('You are awesome'); </script> </body> </html>
Наследование шаблонов
Pug поддерживает наследование шаблонов. Наследование шаблонов работает через ключевые слова block
и extend
. В шаблоне block
— обычный блок Pug, который может заменить дочерний шаблон. Этот процесс является рекурсивным.
Pug
//- base.pug html head title My Site block scripts script(src='/jquery.js') body block content block foot #footer p some footer content //- home.pug extends base.pug - var title = 'Animals' - var pets = ['cat', 'dog'] block content h2= title // - or #{title} without = each petName in pets p= petName // -or #{petName} without =
HTML
<!DOCTYPE html> <html> <head> <title>My site</title> <script src='/jquery.js'></script> </head> <body> <h2>Animals</h2> <p>cat</p> <p>dog</p> <div> <p>some footer content</p> </div> </body> </html>
Интерполяция переменных
Pug предоставляет различные способы вывода переменных.
Pug
- var title = "On Dogs: Man's Best Friend"; - var author = "enlore"; - var theGreat = "<span>escape!</span>"; h2= title p Written with love by #{author} p This will be safe: !{theGreat}
HTML
<h2>On Dogs: Man's Best Friend</h2> <p>Written with love by enlore</p> <p>This will be safe: <span>escape!</span></p>
Миксины
Поддержка миксинов позволяет создавать переиспользуемые блоки.
Pug
//- Declaration mixin pet(name) li.pet= name //- use ul +pet('cat') +pet('dog') +pet('pig')
HTML
<ul> <li>cat</li> <li>dog</li> <li>pig</li> </ul>
Pug
mixin article(title) .article .article-wrapper h2= title if block block else p No content provided +article('Hello world') +article('Hello world') p This is my p Amazing article
HTML
<div> <div> <h2>Hello world</h2> <p>No content provided</p> </div> </div> <div> <div> <h2>Hello world</h2> <p>This is my</p> <p>Amazing article</p> </div> </div>
Pug
mixin link(href, name) //- attributes == {class: "btn"} a(class!=attributes.class href=href)= name +link('/foo', 'foo')(class="btn")
HTML
<a href="/foo">foo</a>
Многострочный ассоциативный массив
Pug
- var priceItem = [ {include: filterInc, parameter : "Розовый фильтр"}, {include: smileInc, parameter : "Смайлики"}, {include: commentInc, parameter : "Комментарии"} ]
Знакомство с препроцессором Pug | thespt.ru
Сложность лёгкая
Время чтения 10 минут
Установка pug
Опции командной строки pug-cli
Пример использования pug
Pug – это препроцессор Node.js который позволяет генерировать HTML с помощью упрощённого синтаксиса, благодаря этому увеличивается скорость вёрстки в несколько раз.
Для работы Pug необходимо установить Node.js
Установка PUG
Установка pug не чем не отличается от установки обычного пакета через npm
Так же у pug есть свой cli “интерфейс командной строки” который во многом удобен и прост в использовании
PUG-CLI
Установка pug-cli происходит аналогично
pug-cli необходимо ставить глобально т.е использовать ключ -g
Для проверки установки pug -cli необходимо в консоли ввести pug -h если команда выполниться успешно то будет показана справка по командам pug.
Опции командной строки pug:
Команда | Описание |
— -v,- -version | Вывести номер версии |
-0,obj <str|path> | Настройки JSON объекта или файла |
-o,- -out <dir> | Вывести отрисованный HTML или скомпилированный JS в папку |
-p,- -path <path> | Имя файла используется для разрешения подключений |
-b,- -basedir <path> | Путь используется для разрешения глобальных подключений |
-P,- -pretty | Компиляция в HTML без сжатия |
-c,- -client | Функция компиляции для клиентской части |
-n,- -name <str> | Название скомпилированного шаблона |
-D,- -no-debug | Компиляция без отладки |
-w,- -watch | Следит за изменением файлов и автоматически перерисовывает |
-E,- -extension <ext> | Указывает расширение выходного файла |
-s,- -silent | Не выводить логи |
— -name-after-file-name | Имя шаблона |
— -doctype <str> | Указывает тип документа в командной строке |
-h,- -help | Вывод справки |
Пример c использованием pug — cli
После установки pug-cli глобально можно попробовать его в действии на небольшом примере. Для этого необходимо создать файл с расширением pug.
Содержимое файла будет иметь простой пример демонстрирующий простоту и удобство pug.
doctype html html head title pug-cli body h2 pug cli work
В этом примере файл main.pug имеет простые команды pug,после компиляции которых получится файл HTML c вёрсткой. Для компиляции исходного кода на pug необходимо открыть консоль в папке с файлом pug. В консоли необходимо вызвать pug и указать файл для компиляции.
В место имени файла можно указать имя папки где хранятся шаблоны pug
После успешной компиляции в консоли будет выведено сообщение о том что компиляция прошла успешно и был создан файл main.html
После компиляции содержимое будет сжато.
Читать полученный HTML будет не удобно, для решения этой проблемы необходимо использовать ключи (опции командной строки pug)
После компиляции с ключом -P получим более удобный для чтения вариант
Пример использования pug без cli
Для использования pug без cli необходимо создать проект через npm и добавить в зависимости pug.
В проекте главный файл (например index.js) использует pug для компиляции и отрисовки HTML.
let pug = require('pug'); let main = pug.compileFile('main.pug'); // Render console.log(main({ name:"thespt" })); console.log(main());
Шаблон pug будет иметь вид
doctype html html head title pug cli body h2 pug cli work #{name} <!-- если входной параметр передан то его выведет-->
Командой node index.js скрипт вызывается на исполнение,после чего скомпилированный HTML будет выведен в консоль.
Подробнее о pug можно узнать на официальном сайте или посетить репозиторий.
0 0 голоса
Рейтинг статьи
Расскажи всем,если это интересно!
Web-разработка • HTML и CSS
Pug — это шаблонизатор и html-препроцессор, написанный на javascript для платформы Node.js, с целью ускорения верстки. Это даже быстрее, чем при использовании emmet — так что будет полезен любому веб-разработчику. Тем более, что освоить Pug можно за пару часов, синтаксис достаточно прост и интуитивно понятен.
Создание проекта
Давайте создадим директорию project
, а внутри нее еще две директории — src
и dist
. В директории src
будут исходники, а в директории dist
— готовая сборка. И откроем проект в VS Code — нужно кликнуть по иконке папки project
правой кнопкой мыши и выбрать в контекстном меню «Открыть с помощью VS Code».
Установка Pug
Для установки надо выполнить две команды, вторая должна быть выполнена из директории проекта:
> npm install pug-cli --g
> npm install pug --save-dev # из директории проекта
Пробуем на зуб
Создадим в директории src
файл index.pug
следующего содержания:
html(lang="ru") head meta(charset="utf-8") title= "Pug. Начало работы" body h2 Hello, World!
Переходим в директорию src
и выполняем команду:
> pug --pretty index.pug
Чтобы следить за изменениями index.pug
— нужно добавить ключ -w
:
> pug --pretty -w index.pug
Установка Gulp
Как работать с gulp — это тема для отдельной статьи, так что без подробностей.
> npm install gulp --save-dev # из директории проекта > npm install gulp-pug --save-dev # из директории проекта
Создаем файл gulpfile.js
с тремя задачами для преобразования pug-файлов и отслеживания изменений.
const gulp = require('gulp'); const pug = require('gulp-pug'); gulp.task('pug', function () { return gulp.src('src/*.pug') .pipe(pug({pretty: true})) .pipe(gulp.dest('dist')); }); gulp.task('watch', function () { return gulp.watch('src/**/*.pug', gulp.parallel('pug')) }); gulp.task('default', gulp.parallel('watch'));
Наш файл package.json
сейчас имеет только три зависимости:
{ "devDependencies": { "gulp": "^4.3.0.2" } }
Синтаксис Pug
Синтаксис Pug достаточно прост. Он не имеет угловых скобок и закрывающих тегов. Вложенность элементов определяется отступом — табуляция или пробел. Классы css задаются через точку, идентификаторы — через решетку, атрибуты — в круглых скобках.
1. Теги, классы, идентификаторы
Давайте создадим маркированный список:
ul li Значение 1 li Значение 2 li Значение 3
<ul> <li>Значение 1</li> <li>Значение 2</li> <li>Значение 3</li> </ul>
Теперь добавим css-классы нашей разметке:
ul.list li.list__item Значение 1 li.list__item Значение 2 li.list__item Значение 3
<ul> <li>Значение 1</li> <li>Значение 2</li> <li>Значение 3</li> </ul>
Добавим тегу <ul>
еще и идентификатор:
ul#items.list li.list__item Значение 1 li.list__item Значение 2 li.list__item Значение 3
<ul> <li>Значение 1</li> <li>Значение 2</li> <li>Значение 3</li> </ul>
2. Атрибуты элемента
Чтобы указать атрибут элементу — достаточно указать его в круглых скобках:
a(href="#", target="_blank") Ссылка a(href="#" target="_blank") Ссылка
<a href="#" target="_blank">Ссылка</a>
Если атрибутов много, то можно указать их многострочными линиями:
input( type='checkbox' name='agreement' checked )
Если с атрибутами необходимо указать класс и/или индификатор, то указываются они до атрибутов.
3. Текст элемента
Текст элементу указывается через пробел, после символа |
или после точки .
:
p.paragraph Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.
p.paragraph | Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.
p.paragraph. Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.
Результат будет одинаковым:
<p>Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.</p>
4. Буферизация и экранирование
Текст элементу можно присвоить — это что-то вроде работы с переменными. Как будто содержимое элемента — это переменная и мы присваиваем ей значение. При этом значение сперва вычисляется как javascript-выражение. И еще производится экранизация символов <
, >
и &
.
p.paragraph= 'Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.'
p.paragraph = 'Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.'
<p>Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.</p>
Чтобы избежать экранирования, надо использовать !=
:
p.paragraph!= 'Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.'
p.paragraph != 'Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.'
<p>Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.</p>
5. Вывод переменных
Есть два способа вывести значение переменной — с экранированием символов <
, >
, &
и без экранирования.
- var content = 'ipsum <em>dolor sit</em> amet' p.paragraph Lorem #{content}, consectetur adipisicing elit. p.paragraph Lorem !{content}, consectetur adipisicing elit.
<p>Lorem ipsum <em>dolor sit</em> amet, consectetur adipisicing elit.</p> <p>Lorem ipsum <em>dolor sit</em> amet, consectetur adipisicing elit.</p>
6. Элемент внутри элемента
Давайте разместим изображение внутри параграфа:
p.paragraph: img.image(src="picture.jpg" alt="Изображение")
<p><img src="picture.jpg" alt="Изображение"/></p>
Еще один пример — параграф, внутри которого <em>
и ссылка:
p Lorem ipsum <em>dolor</em> sit amet, consectetur #[a.link(href="page.html") adipisicing] elit.
<p>Lorem ipsum <em>dolor</em> sit amet, consectetur <a href="page.html">adipisicing</a> elit.</p>
7. Комментарии в коде
Однострочный комментарий начинается с символов //
— такой комментарий будет виден в итоговом html-коде. Чтобы комментарий не попал в итоговый html-код — он должен начинаться с символов //-
.
// Этот комментарий виден в итоговом html-коде p.paragraph Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit. //- Этот комментарий будет удален из html-кода p.paragraph: img.image(src="picture.jpg" alt="Изображение")
<!-- Этот комментарий виден в итоговом html-коде --> <p>Lorem ipsum <em>dolor</em> sit amet, consectetur adipisicing elit.</p> <p><img src="picture.jpg" alt="Изображение"/></p>
8. Подключения (include)
Большим достоинством Pug является возможность подключения отдельных фрагментов кода. То есть можно выносить в отдельные фрагменты кода целые области сайта. Например, вынести в отдельные файлы header
, sidebar
, content
, footer
и все это собрать в одном индексном файле.
// файл index.pug doctype html html(lang="ru") head meta(charset="utf-8") title Подключения (include) body include ./parts/header.pug include ./parts/content.pug include ./parts/footer.pug
// файл parts/header.pug header Это шапка сайта
// файл parts/content.pug div.content main Это основной контент сайта aside Это контент сайдбара сайта
// файл parts/footer.pug footer Это подвал сайта
Итоговый файл index.html
:
<!-- файл index.pug --> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Подключения (include)</title> </head> <body> <!-- файл parts/header.pug --> <header>Это шапка сайта</header> <!-- файл parts/content.pug --> <div> <main>Это основной контент сайта</main> <aside>Это контент сайдбара сайта</aside> </div> <!-- файл parts/footer.pug --> <footer>Это подвал сайта</footer> </body> </html>
9. Наследование шаблонов
Наследование шаблонов работает через ключевые слова block
и extend
. В родительском шаблоне block
— это просто заглушка, которая «резервирует» место. Дочерний шаблон на это «зарезервированное» место вставляет какой-то контент. При этом block
в родительском шаблоне может иметь контент по умолчанию. А дочерний шаблон может либо заместить (replace
) этот контент, либо дополнить его — append
и prepend
.
Родительский шаблон layout.pug
:
block variables - var title = 'Это мой сайт' - var head1 = 'Это заголовок по умолчанию' - var content = 'Это контент страницы по умолчанию' doctype html html(lang="ru") head title #{title} block scripts script(src='/js/jquery.js') body block header header Это шапка сайта block content main h2 #{head1} div.content p #{content} block footer footer Это подвал сайта
Дочерний шаблон contact.pug
:
extends layout.pug // этот блок будет замещен (replace) block variables - var title = 'Контакты' - var head1 = 'Контактная информация' - var content = 'Контактная информация: адрес, почта, телефон' // этот блок будет дополнен (append) block append scripts script(src='/js/script.js') // этот блок будет дополнен (prepend) block prepend content // Этот комментарий будет добавлен на страницу в самое начало блока
Итоговый файл contact.html
:
<!DOCTYPE html> <html lang="ru"> <head> <title>Контакты</title> <script src="/js/jquery.js"></script> <script src="/js/script.js"></script> </head> <body> <header>Это шапка сайта</header> <!-- Этот комментарий будет добавлен на страницу в самое начало блока --> <main> <h2>Контактная информация</h2> <div> <p>Контактная информация: адрес, почта, телефон</p> </div> </main> <footer>Это подвал сайта</footer> </body> </html>
Поиск:
HTML • Web-разработка • JavaScript • Теория • Pug • Верстка
[3.1.1] PUG — Установка и настройка
pug_access_mode // Режим доступа к серверу
pug_password_field // Пароль для setinfo
pug_default_access // Доступ для обычных игроков по умолчанию
pug_eac_url // URL который будет отображаться на скриншотах EAC
pug_eac_url_format // URL для EAC
pug_version // Показать версию мода Pug
pug_players_min // Минимальное число игроков для начала игры (Не используется в файле конфига)
pug_players_max // Максимум игроков в командах (Не используется в файле конфига)
pug_players_min_default // Минимальное число игроков для начала игры (Это значение будет сбрасывать минимум игроков после каждой смены карты)
pug_players_max_default // Максимум игроков для сброса (Это значение будет сбрасывать максимум игроков после каждой смены карт)
pug_rounds_max // Сколько раундов требуется сыграть перед началом Овертайма
pug_rounds_overtime // Число раундов в Овертайме (суммарно)
pug_allow_overtime // Разрешить Овертайм (Если ноль, игра может end tied)
pug_intermission_time // Время для сброса и перезагрузки PUG после окончания игры
pug_allow_spectators // Позволить зрителям находиться на сервере
pug_allow_hltv // Разрешить HLTV
pug_retry_time // Время между отсоединением и повторным подключением к серверу(антиреконнект)
pug_force_ready_time // Выставляет принудительную готовность игрока в это время (если 0, то функция неактивна)
pug_force_ready_kick // Кикает неготовых игроков (если 0, то игроки автоматически признаются готовыми)
pug_force_auto_swap // Автообмен команд без учёта системы готовности если команды заполнены
pug_force_restart // Принудительный рестарт после обмена команд
pug_switch_delay // Задержка перед обменом команд местами при прошествии половины игры(Half-Time)
pug_block_shield // Блокировать щит
pug_block_grenades // Блокировать гранаты во время разминки
pug_show_money // Показывает деньги команды при каждом возрождении
pug_vote_delay // как долго длится голосование
pug_vote_percent // Разница между голосами для определения победителя
pug_vote_map_enabled // Включить Votemap в PUG
pug_vote_map // Будет ли текущая карта в голосовании Votemap (не используется конфиг Pug)
pug_vote_map_same // Добавляет текущую карту в меню Votemap
pug_show_scores // Показать очки после голосования за карту
pug_teams_enforcement // Метод назначения команд (0 = голосование, 1 = капитаны, 2 = автоматически, 3 = никак, 4 = скилл)
pug_teams_kniferound // Раунд на ножах после выбора команд и игроков
pug_show_votes // Как показать итоги голосования (1 = чат, 2 = Hud)
pug_hlds_votes // Включает обычные команды голосования HLDS, такие как vote и votemap
pug_vote_kick_percent // Процент для кика при голосовании Vote Kick
pug_vote_kick_teams // Vote Kick только для тиммейтов
pug_config_pugmod // Конфиг, используемый для кваров мода
pug_config_warmup // Разминка в PUG
pug_config_start // Используется в начале голосования
pug_config_live // Используется после начала матча (То есть в игре)
pug_config_halftime // Используется при достижении половины игры(Half-Time)
pug_config_overtime // Используется во время Овертайма
pug_config_end // Этот конфиг используется после окончания матча
pug_sql_host // адрес сервера SQL
pug_sql_user // пользователь сервера SQL
pug_sql_pass // пароль к серверу SQL
pug_sql_db // Имя базы данных
pug_bans_url // URL страницы с банами
pug_require_register // Кикать игроков, не зарегистрированных в БД
pug_leaves_ban // Забанить игрока, слишком часто выходящего с сервера
pug_leaves_bantime // Time to ban when reach leave infraction times (In minutes)
pug_ranked_server // Rank the server to database
pug_web_url // URL of stats pages for pug mod
pug_hltv_host // IP сервера HLTV
pug_hltv_port // порт сервера HLTV
pug_hltv_pass // пароль к серверу HLTV (Rcon|adminpass)
pug_hltv_demo_dir // Суб-Директория для демок (Всё хранится в папке cstrike)
pug_hltv_demo_name // Префикс названия демки (по умолчанию что-то типа pug-1504070051-de_dust2.dem)
Использование webpack для верстки. Подключение Pug
Использовать webpack для верстке многостраничных сайтов легко.
В текущей сборке уже готово:
- Подключен babel7 — js код автоматический перегонится в старый стандарт и будет работать во всех браузерах
- Весь js код автоматический поджимается
- Подключен SASS (scss) с удобной настройкой под себя
- По желанию можно использовать обычный css
- autoprefixer — префиксы расставятся автоматический, css код будет валидным во всех браузерах
- Все стили будут максимально поджаты с cssnano и mq-packer
- Настроен livereload — авто обновление страницы при любых изменениях в js, css, html
- Авто сплиты для js и css файлов
- Подключен vue.js с удобной интеграцией шаблонов напрямубю в хтмл
- Автоматический или ручной подхват html страниц
- Константы для удобной конфигурации шаблона под себя
Webpack для верстки
Первый вариант — без использования шаблонизатора pug:
Первый шаг скачать текущую сборку — ссылка на прямое скачивание или репозиторий на GitHub
Далее следовать простым командам:
// Установить все зависимости
npm install
// Запустить сервер для дев разработки (http://localhost:8081/)
npm run dev
// Команда для деплоя (папка на выходе будет как dist)
npm run build
Более подробную инструкцию можно найти в README.md
— ссылка здесь
Исходный код: https://github.com/vedees/webpack-template
Webpack 4 Подключение и настройка pug и pug-loader:
Для устновки pug
и pug-loader
в терминале:
npm i pug pug-loader --save-dev
Далее нужно добавить обработчик для pug файлов:
{
test: /\.pug$/,
loader: 'pug-loader'
}
Обработка pug страниц:
Первое, что нужно сделать это указать, что будем обрабатывать и откуда брать pug файлы:
const PAGES_DIR = `${PATHS.src}/pug/pages/`
const PAGES = fs.readdirSync(PAGES_DIR).filter(fileName => fileName.endsWith('.pug'))
Далее есть два способа обработки. Первый способ — автоматическое добавление страниц:
...PAGES.map(page => new HtmlWebpackPlugin({
template: `${PAGES_DIR}/${page}`,
filename: `./${page.replace(/\.pug/,'.html')}`
}))
Второй способ — ручной (можно легко связывать с первым способом) :
new HtmlWebpackPlugin({
template: `${PAGES_DIR}/about/index.pug`,
filename: './about/index.html',
inject: true
}),
new HtmlWebpackPlugin({
template: `${PAGES_DIR}/about/portfolio.pug`,
filename: './about/portfolio.html',
inject: true
})
В пример привел страницы индекс и абаут из директории about
.
Теперь осталось создать страницы для пага, а также главные лаяуты с инклюдами.
Все ваши вопросы есть в ридми, но если вы не найдете свой вопрос то можете задать его здесь или на ютубе!
Весь исходный код: — https://github.com/vedees/webpack-template-pug
учебник по pug.js | Глава 2 | Узнайте, как установить pug
В этой части серии уроков по мопсу мы узнаем, как начать работу с мопсом.
Узнаем, как установить мопса.
Предпосылки для начала работы с мопсом следующие:
- Node.js:
Вы можете скачать его здесь.
После завершения установки мы можем проверить номер версии установленного узла.js
с помощью
следующая команда:> узел -v v8.5.0
Вы можете узнать больше о
node.js
из нашей серии руководств по node.js 30 дней использования node. - NPM: Он будет установлен автоматически при установке
node.js
.
Вы можете проверить номер версии установленногоnpm
, используя следующую команду:> npm -v 5.5.1
Вы можете узнать больше о npm здесь.
Вот и все. У нас все готово к установке pug
.
Ниже приведены варианты, предоставляемые pug-cli:
> мопс -h
-h, --help вывести информацию об использовании
-V, --version вывести номер версии
-O, --obj Объект или файл параметров JSON / JavaScript
-o, --out выводить обработанный HTML или скомпилированный JavaScript в
-p, --path <путь> имя файла, используемое для разрешения, включает
-P, --pretty компилировать красивый HTML-вывод
-c, --client функция компиляции для клиентской среды выполнения.js
-n, --name имя скомпилированного шаблона (требуется --client)
-D, --no-debug компилировать без отладки (меньшие функции)
-w, --watch отслеживать файлы на предмет изменений и автоматически перерисовывать
-E, --extension указать расширение выходного файла
-s, --silent не выводить логи
--name-after-file имя шаблона после последнего раздела файла
путь (требуется --client и заменяется --name)
--doctype указать тип документа в командной строке (полезно, если он
не указано в шаблоне)
Проверка версии pug
и pug-cli
:
> мопс -V
версия мопса: 2.0,0-rc.4
версия pug-cli: 1.0.0-alpha6
В этой статье мы узнаем о предпосылках для установки pug. Также узнаем, как можно установить pug
и pug-cli
. Также мы узнаем обо всех возможностях pug-cli
с помощью простого
пример.
Вы можете клонировать все фрагменты, представленные в этой серии, с нашего github.
репо: GITHUB
мопс — npm
Полная документация находится на pugjs.org
Pug — это высокопроизводительный шаблонизатор, созданный под сильным влиянием Haml.
и реализован с помощью JavaScript для Node.js и браузеров. Для отчетов об ошибках,
пожелания и вопросы по функциям, откройте вопрос.
Для обсуждения присоединяйтесь к чату.
Вы можете протестировать Пага онлайн здесь.
Переименовать из «Нефрита» в
Этот проект ранее назывался «Джейд». Однако нам стало известно, что «Jade» является зарегистрированным товарным знаком, и поэтому необходимо переименование.После некоторого обсуждения между сопровождающими, «Pug» было выбрано в качестве нового названия для этого проекта. Следующая основная версия будет содержать «мопс» в качестве имени пакета.
Если ваш пакет или приложение в настоящее время использует jade
, не беспокойтесь: у нас есть защищенные разрешения, чтобы продолжать занимать это имя пакета, хотя все новые версии будут выпущены под pug
.
Перед переименованием мы уже начали работу над несовместимым Jade 2.0.0. Затем мы сделали так, чтобы эта новая мажорная версия совпадала с переименованием в Pug.Следовательно, обновление с Jade до Pug будет таким же процессом, как и обновление любого другого пакета с повышением основной версии. В настоящее время Pug 2.0.0 все еще находится на стадии бета-тестирования, и есть несколько синтаксических различий, которые мы устарели и удалили. Такие различия задокументированы в №2305.
Веб-сайт и документация для Pug все еще обновляются, но если вы новичок в Pug, вам следует начать работу с новым синтаксисом и установить пакет Pug в npm.
Установка
Пакет
через npm:
Командная строка
После установки последней версии Node.js, установить с помощью:
и запустить с
Синтаксис
Pug — чистый, чувствительный к пробелам синтаксис для написания html. Вот простой пример:
doctype html html (lang = "en") голова title = pageTitle скрипт (type = 'text / javascript'). если (foo) бар (1 + 5) тело h2 Pug - шаблонизатор узлов # container.col если вы используете мопс п ты потрясающий еще p Давай! п. Pug - это краткий и простой язык шаблонов с упор на производительность и мощные функции.
становится
Мопс Pug - шаблонизатор узлов
Вы великолепны
Pug - это краткий и простой язык шаблонов, в котором особое внимание уделяется производительности и мощным функциям.
API
Полный API см. В pugjs.org / api / reference.html
var pug = require ('мопс'); // компилировать var fn = pug.compile ('строка мопса', параметры); var html = fn (местные жители); // оказывать var html = pug.render ('строка мопса', объединить (параметры, местные жители)); // renderFile var html = pug.renderFile ('имя_файла.pug', объединить (параметры, местные жители));
Опции
-
filename
Используется в исключениях и требуется при использовании включает -
compileDebug
Когдаfalse
не скомпилирован инструментарий отладки -
довольно
Добавить пробелы с красивым отступом для вывода (по умолчанию false)
Поддержка браузера
Последнюю версию pug можно скачать для браузера в автономном виде отсюда.Однако он поддерживает только самые последние версии браузеров и представляет собой большой файл. Рекомендуется предварительно скомпилировать шаблоны мопсов на JavaScript.
Чтобы скомпилировать шаблон для использования на клиенте с помощью командной строки, выполните:
$ pug --client --no-debug filename.pug
, который создаст filename.js
, содержащий скомпилированный шаблон.
Дополнительные ресурсы
Учебников:
Реализаций на других языках:
Другое:
Лицензия
MIT
интерполяция — мопс
Pug предоставляет операторов для множества различных интерполяционных потребностей.
Строковая интерполяция с экранированием
Рассмотрите размещение следующих локальных переменных шаблона: title
, author
и theGreat
.
— var title = «О собаках: лучший друг человека»;
— var author = «enlore»;
— var theGreat = « escape! «;
h2 = заголовок
p Написано с любовью # {author}
p Это будет безопасно: # {theGreat}
О собаках: лучший друг человека
Написано с любовью Энлора
Это будет безопасно: & lt; span & gt; escape! & lt; / span & gt;
Заголовок
следует базовому шаблону для оценки локального шаблона, но код между # {
и }
оценивается, экранируется, а результат помещается в буфер вывода визуализируемого шаблона.
Это может быть любое допустимое выражение Javascript, так что вы можете делать все, что вам нравится.
— var msg = «не мой внутренний голос»;
p Это # {msg.toUpperCase ()}
Это НЕ МОЙ ВНУТРЕННИЙ ГОЛОС
Pug достаточно умен, чтобы понять, где заканчивается выражение, поэтому вы даже можете включить }
без экранирования.
p Нет экранирования для # {‘}’}!
Никаких побегов для}!
Если вам нужно добавить дословный код # {
, вы можете либо убрать его, либо использовать интерполяцию.(Так мета!)
p Экранирование работает с \ # {интерполяцией}
p Интерполяция также работает с # {‘# {interpolation}’}!
Экранирование работает с # {interpolation}
Интерполяция работает и с # {interpolation}!
Строковая интерполяция, без экранирования
У вас нет , есть на всякий случай. Вы также можете буферизовать неэкранированные значения в свои шаблоны.
— var riskyBusiness = « Некоторые девушки носят одежду моей матери. «;
.Цитировать
п Джоэл:! {riskyBusiness}
Джоэл: Некоторые девушки носят одежду моей матери.
Внимание
Имейте в виду, что буферизация неэкранированного содержимого в ваших шаблонах может быть очень рискованным, если этот контент поступает только что от ваших пользователей. Никогда не доверяйте вводу пользователя!
Интерполяция тегов
Интерполяция работает не только со значениями JavaScript, но и с Pug.Просто используйте синтаксис интерполяции тегов, например:
с.
Это очень длинный и скучный абзац, состоящий из нескольких строк.
Внезапно появляется # [сильная, сильно сформулированная фраза], которую нельзя
# [em проигнорировано].
п.
А вот пример интерполированного тега с атрибутом:
# [q (lang = «es») ¡Hola Mundo!]
Это очень длинный и скучный абзац, состоящий из нескольких строк.
Внезапно появляется резко сформулированная фраза , которую нельзя
игнорируется .
А вот пример интерполированного тега с атрибутом:
¡Hola Mundo!
Вы могли бы сделать то же самое, написав HTML-тег в строке с вашим Pug … но тогда какой смысл писать Pug? Оберните объявление встроенного тега Pug в # [
и ]
, и оно будет оценено и буферизовано в содержимое содержащего тега.
Контроль пробелов
Синтаксис интерполяции тегов особенно полезен для встроенных тегов, где пробелы до и после тега имеют значение.
Однако по умолчанию Pug удаляет все пробелы до и после тегов. Посмотрите на следующий пример:
с
| Если я не напишу абзац с интерполяцией тегов, такие теги, как
сильный сильный
| а также
эм эм
| может привести к неожиданным результатам.
п.
Если я это сделаю, пробел будет # [сильно уважаемый] и # [em everybody] счастлив.
Если я не напишу абзац с интерполяцией тегов, такие теги, как strong и em , могут привести к неожиданным результатам.
Если я это сделаю, пробелы соблюдаются и все довольны.
См. Раздел с пробелами на странице «Обычный текст» для более подробного обсуждения этой темы.
атрибутов — мопс
Атрибуты тега похожи на HTML (с необязательными запятыми), но их значения представляют собой обычный JavaScript.
(ПРИМЕЧАНИЕ. В примерах на этой странице используется вертикальная черта ( |
) для управления пробелами.)
a (href = ‘// google.com ‘) Google
|
|
a (class = ‘button’ href = ‘// google.com’) Google
|
|
a (class = ‘button’, href = ‘// google.com’) Google
Нормальные выражения JavaScript тоже работают нормально:
— вар аутентифицирован = истина
body (class = authenticated? ‘authed’: ‘anon’)
Многострочные атрибуты
Если у вас много атрибутов, вы также можете распределить их по многим строкам:
вход (
type = ‘checkbox’
name = ‘соглашение’
проверил
)
Если ваша среда выполнения JavaScript поддерживает строки шаблонов ES2015 (включая Node.js / io.js 1.0.0 и новее), вы можете использовать этот синтаксис для атрибутов. Это действительно полезно для атрибутов с очень длинными значениями:
вход (data-json = `
{
«очень-длинный»: «кусок»,
«данные»: правда
}
`)
Цитируемые атрибуты
Если имя вашего атрибута содержит нечетные символы, которые могут мешать синтаксису JavaScript, либо укажите его в кавычках, используя ""
или ''
, либо используйте запятые для разделения различных атрибутов.Синтаксическая ошибка: присвоение rvalue
div (class = ‘div-class’, (click) = ‘play ()’)
div (class = ‘div-class’ ‘(click)’ = ‘play ()’)
Интерполяция атрибутов
Внимание
Предыдущие версии Pug / Jade поддерживали синтаксис интерполяции, например:
a (href = "/ # {url}") Ссылка
Этот синтаксис больше не поддерживается. Альтернативы находятся ниже.(Дополнительную информацию о других несовместимостях между Pug v2 и предыдущими версиями см. В нашем руководстве по миграции.)
Вот несколько альтернатив, которые вы можете использовать для включения переменных в свой атрибут:
Просто напишите атрибут в JavaScript:
— var url = ‘pug-test.html’;
a (href = ‘/’ + url) Ссылка
|
|
— url = ‘https://example.com/’
a (href = url) Другая ссылкаЕсли ваша среда выполнения JavaScript поддерживает строки шаблонов ES2015 (включая Node.js / io.js 1.0.0 и новее), вы также можете использовать его синтаксис для упрощения ваших атрибутов:
— var btnType = ‘info’
— var btnSize = ‘lg’
кнопка (type = ‘button’ + btnType + ‘btn-‘ + btnSize)
|
|
button (type = ‘button’ class = `btn btn — $ {btnType} btn — $ {btnSize}`)
Неэкранированные атрибуты
По умолчанию все атрибуты экранированы, то есть специальные символы заменяются escape-последовательностями, чтобы предотвратить атаки (например, межсайтовый скриптинг).Если вам нужно использовать специальные символы, используйте ! =
вместо =
.
div (escaped = «")
div (unescaped! = "")
Осторожно
Неэкранированный буферный код может быть опасен. Вы должны убедиться, что дезинфицировали все вводимые пользователем данные, чтобы избежать межсайтового скриптинга.
Логические атрибуты
Логические атрибуты зеркалируются Pug.Допускаются логические значения ( true
и false
). Если значение не указано true
предполагается.
input (type = 'checkbox' установлен)
|
|
ввод (type = 'checkbox' checked = true)
|
|
ввод (type = 'checkbox' отмечен = false)
|
|
input (type = 'checkbox' checked = true.toString ())
Если тип документа - html
, Pug знает, что не нужно зеркалировать атрибут, и вместо этого использует краткий стиль (понятный для всех браузеров).
doctype html
|
|
ввод (установлен флажок type = 'checkbox')
|
|
ввод (type = 'checkbox' checked = true)
|
|
ввод (type = 'checkbox' отмечен = false)
|
|
input (type = 'checkbox' checked = true && 'checked')
Атрибуты стиля
Атрибут стиля может быть строкой, как и любой обычный атрибут; но он также может быть объектом, что удобно, когда стили создаются с помощью JavaScript.
a (style = {color: 'red', background: 'green'})
Атрибуты класса
Атрибут класса
может быть строкой, как любой обычный атрибут; но это также может быть массив имен классов, что удобно при генерации из JavaScript.
- var classes = ['foo', 'bar', 'baz']
а (класс = классы)
|
|
// - атрибут класса также может повторяться для объединения массивов
a.bang (class = classes class = ['bing'])
Это также может быть объект, который сопоставляет имена классов со значениями true
или false
.Это полезно для применения условных классов
- var currentUrl = '/ about'
a (class = {active: currentUrl === '/'} href = '/') Главная
|
|
a (class = {active: currentUrl === '/ about'} href = '/ about') Около
Класс Literal
Классы могут быть определены с использованием синтаксиса .classname
:
Поскольку div
являются наиболее распространенным выбором тегов, это значение по умолчанию, если вы опускаете имя тега:
Литерал ID
идентификаторов могут быть определены с использованием синтаксиса #idname
:
Поскольку div
являются наиболее распространенным выбором тегов, это значение по умолчанию, если вы опускаете имя тега:
и атрибуты
Синтаксис и атрибуты
, произносимый как «и атрибуты», может использоваться для разделения объекта на атрибуты элемента.
div # foo (data-bar = "foo") & attributes ({'data-foo': 'bar'})
В приведенном выше примере используется литерал объекта. Но вы также можете использовать переменную, значение которой также является объектом. (См. Также: Атрибуты Mixin).
- var attributes = {};
- attributes.class = 'baz';
div # foo (data-bar = "foo") и атрибуты (атрибуты)
Осторожно
Атрибуты, применяемые с использованием и атрибутов
, не экранируются автоматически. Вы должны убедиться, что дезинфицировали все вводимые пользователем данные, чтобы избежать межсайтового скриптинга (XSS). При передаче атрибутов
из вызова миксина это делается автоматически.
Что такое Pug.js (Jade) и как его использовать в веб-приложении Node.js? | Автор: Brandon Morelli
В этом кратком руководстве вы узнаете, что такое Pug.js и как использовать его с Node & Express на реальном примере.
Я долго смеялся над этой картинкой - via unsplash.com
В этом уроке мы собираемся изучить сайт погоды, который я ранее создавал с помощью Node.js, Express JS, EJS и API OpenWeatherMap. Вот учебник и Вот полный код на GitHub . Я настоятельно рекомендую вам проверить эти ссылки, прежде чем продолжить.
Чтобы понять Pug, вы должны помнить, что браузер читает HTML и CSS, а затем отображает отформатированные изображения и текст для клиента в зависимости от того, что ему говорят HTML и CSS.
Мопс - посредник.
Pug - это шаблонизатор для узла .js .
Шаблонизатор позволяет нам вводить данные и затем создавать HTML.
Вкратце: Во время выполнения Pug (и другие механизмы шаблонов) заменяют переменные в нашем файле фактическими значениями, а затем отправляют полученную строку HTML клиенту.
Таким же образом мы используем другие движки шаблонов.
Вспомните следующий код из моего: Создайте веб-сайт погоды за 30 минут с помощью Node.js + Express + OpenWeather , в котором мы использовали EJS в качестве языка шаблона:
// TERMINAL
npm install ejs - -save // СЕРВЕР.JS
app.set ('view engine', 'ejs')
Использовать Pug так же просто. Вот три шага:
- Установите Pug в свой проект:
npm install pug --save
- Настройте свой механизм просмотра:
app.set ('view engine', 'pug')
- Создайте
.pug
file
Отличный вопрос! Прежде чем мы рассмотрим файл .pug
, давайте посмотрим, как выглядел наш файл .ejs
в моем последнем руководстве:
С EJS
Aaaaaand With Pug:
- Переключение с EJS на Pug уменьшил наш код с 27 строк до 17!
- Когда вы пишете с помощью Pug, вы пишете код, который выглядит как абзацы.Это значительно улучшает читаемость кода и упрощает проекты с несколькими разработчиками.
- Нет закрывающих тегов с Pug. Pug использует отступы для определения вложенности тегов. Есть даже сокращения для классов (.) И идентификаторов (#)
- Что наиболее важно, мы можем написать JavaScript, который на самом деле (почти / вроде) выглядит как JavaScript в наших файлах мопсов.
- С Мопсом пробелы имеют значение. И это очень важно. Малейшая ошибка в форматировании / отступах / интервалах означает большие проблемы для вашего кода.
- С Pug вы не можете копировать HTML из любого места, вам нужно все преобразовать в Pug, прежде чем вы сможете его использовать.
Вы можете просмотреть полный код сайта погоды (используя Pug) на Github.
Надеюсь, теперь вы понимаете, что такое Pug.js, как выглядит файл .pug
и почему механизм шаблонов важен в веб-разработке. Я публикую несколько статей и руководств каждую неделю. Пожалуйста, укажите здесь свой адрес электронной почты, если вы хотите, чтобы вас добавляли в мой еженедельный список рассылки.
Как создать приложение узла с помощью шаблона Pug | автор: Primrose Katena
Изображение предоставлено Free-Photos с сайта Pixabay
В этом уроке я объясню, как использовать шаблон мопса и NodeJS для создания веб-страницы. Мы создадим приложение Node с нуля, настроим Nodejs, express и движок шаблонов pug. В конце этого руководства вы должны создать единую веб-страницу и узнать, как использовать упомянутые выше технологии.
Чтобы получить практический опыт работы с этой статьей, вам понадобится:
- Nodejs на вашем компьютере.Щелкните здесь, чтобы получить Nodejs, если у вас его нет.
- Базовое понимание Nodejs.
В дополнение к предварительным условиям, упомянутым выше, вы должны быть знакомы с JavaScript. Начните с создания папки в выбранном вами каталоге с помощью терминала. Я назвал свой newProject:
mkdir newProject
Используйте IDE по вашему выбору, в моем случае я использую Visual Studio Code. Откройте папку newProject в Visual Studio Code (VSCode).Я рекомендую использовать терминал в vsCode, потому что к нему проще получить доступ, вам не нужно вводить каталог пути. Запустив приведенный ниже код, мы инициируем наш проект, создав файл package.json .
npm init
Как показано ниже, я ничего не менял, кроме точки входа , я изменил с index.js (по умолчанию) на app.js . Однако вы можете указать все поля, подробнее о содержимом полей package.json читайте здесь, чтобы вносить осознанные изменения.
имя пакета: (newproject) версия: (1.0.0) описание: точка входа: (index.js) app.jstest команда: git репозиторий: ключевые слова: автор: лицензия: (ISC)
Вы успешно создали package.json
файл, расположенный в корневой папке вашего проекта, для идентификации проекта и содержащий зависимости, которые мы установим add. Каждая добавленная в этот проект зависимость будет отображаться в файле package.json . Давайте установим Nodejs и другие зависимости, которые нам нужны в проекте, после того, как он будет запущен, он добавит папку модулей узлов и package-lock.json файл:
npm install nodejs express
Зависимости, которые мы только что установили, служат для разных целей. Express - это веб-фреймворк промежуточного программного обеспечения, который обрабатывает маршруты, запросы и ответы.
Мы готовы к старту! Давайте создадим файл app.js в корневой папке. В этом файле мы создаем HTTP-сервер, который прослушивает порт 3000.
const express = require ('express') const app = express () app.listen (3000, () => console.log («Прослушивание на порт 3000 ”))
Вывод:
Прослушивание порта 3000
Мы выполнили приложение node .js в терминале, чтобы получить этот вывод. Это неэффективный способ разработки приложений Node, потому что каждый раз, когда мы вносим изменения, мы должны останавливать веб-сервер, сохранять изменения и выполнять ту же команду. Nodemon автоматизирует процесс перезапуска нашего проекта Node каждый раз, когда мы сохраняем изменения.
npm install nodemon
После завершения установки перейдите к файлу package.json и добавьте в скрипт следующее:
scripts {
"app": "nodemon app.js "
}
Вы можете назвать свое значение ключа как угодно, в моем случае я назвал его app. Чтобы выполнить наше приложение Node с помощью Nodemon, вы вводите в командной строке:
npm run app
С этого момента все, что вы можете сделать, это сохранить все свои изменения и позволить Nodemon позаботиться о перезапуске веб-сервера за вас.
Использование start в качестве ключа для нашей точки входа в приложение может упростить нашу жизнь. Когда Узел наблюдает за запуском, он автоматически выполнит связанное с ним значение, в моем случае приложение nodemon .js . Настоятельно рекомендуется использовать start, потому что кто-то, кто будет клонировать ваш репозиторий, не будет пытаться пройти ваш код, чтобы найти точку входа, поскольку npm start является стандартом. Вернемся к файлу package.json и изменим ключ с app на start .
скриптов {
"start": "nodemon app.js"
}
Когда мы используем start, мы можем изящно опустить команду run в интерфейсе командной строки, и Nodejs поймет.
npm start
Вот результат, которого вы должны ожидать с тех пор, как мы представили Nodemon.
> [email protected] start / Users / mac / Documents / newProject> nodemon app.js [nodemon] 2.0.3 [nodemon] для перезапуска в любое время введите `rs` [nodemon] пути наблюдения: *. * [nodemon] наблюдает за расширениями: js, mjs, json [nodemon] запускает `node app.js` Прослушивает порт 3000
Добавление механизма шаблонов PUG
Здесь мы могли бы использовать HTML или любую внешнюю структуру по вашему выбору .В этом руководстве мы рассмотрим использование механизма шаблонов HTML, Pug, который очень хорошо работает с Node.js. Движок шаблонов Pug позволяет нам писать код, который можно преобразовать в HTML-код. Одно из основных заметных различий между HTML и шаблоном мопса заключается в том, что шаблон мопса не требует закрытия тегов. Еще одна интересная вещь, которую следует отметить в шаблоне Pug, заключается в том, что в нем есть условия, циклы и другие функции, которых нет в HTML. Пришло время создать наш собственный файл Pug.
Давайте установим PUG в наше приложение Node в качестве зависимости.
npm install pug
Давайте создадим наш собственный файл Pug, чтобы полностью понять шаблон Pug. В корневой папке создайте папку с именем src . В src создайте папку с именем views . В папке views мы создаем файл с именем index с расширением .pug . Вы заметите, что ваш файл Pug имеет красный значок. Давайте добавим код в наш файл index.pug .
Doctype html html head meta charset UTF-8 title Изучение тела шаблона Pug h2 # myHeading Это шаблон pug p.firstParagraph Мне нравится этот шаблон !!!
Отступы очень важны в Pug, они позволяют шаблонизатору Pug легко узнать, какая часть кода вложена. В приведенном выше коде обратите внимание, как я добавил идентификатор с именем myHeading в h2 и класс в абзац. Когда приведенный выше код компилируется, это то, что он переводит в:
Изучение шаблона Pug
< / title>
Это шаблон мопса
Мне нравится этот шаблон !!!
Следующим шагом будет добавление нашего шаблона pug.В app.js давайте добавим файл pug. Используя app.set () , мы указываем, что используем механизм шаблонов представления под названием Pug, и указываем каталог, в котором находится наш index.pug . Используя app.get () , мы визуализируем наш файл index.pug.
const express = require ('express') const app = express () app.set ('механизм просмотра', 'pug') app.set ('views', './src.views')app.get ('/', (req, res) => {res.render (index)}) app.listen (3000, () => console.log («Прослушивание порта 3000»))
Давайте запустим npm start на терминале или просто сохраним все, если веб-сервер все еще работал, чтобы проверить вывод. Зайдите в свой браузер и откройте http: // localhost: 3000. Если вы внимательно следовали этому руководству, вы увидите, что наш index.pug был успешно обработан, как показано ниже:
В этом руководстве вы успешно создали приложение Node.js с нуля и узнали, как интегрировать механизм шаблонов в Nodejs. Вы узнали, насколько крутым является этот шаблонизатор PUG, интеграция Node.js и express, а также другие зависимости.
Мопс (нефрит) | WebStorm
WebStorm интегрируется с механизмом шаблонов Pug (Jade), который преобразует файлы Pug (Jade) в HTML.
Файлы мопсов отмечены значком; Файлы Jade отмечены значком.
Перед началом работы
Убедитесь, что необходимые плагины Pug (ex-Jade) и File Watchers включены в Настройках / Предпочтения | Страница "Плагины", вкладка "Установленные", подробности см. В разделе "Управление плагинами".
Установка Pug
Компиляция Pug
Для автоматической компиляции кода вам необходимо настроить Наблюдатель за файлами Pug / Jade, который будет отслеживать изменения в ваших файлах и запускать механизм шаблонов.
Когда вы открываете файл, WebStorm проверяет, доступен ли в текущем проекте соответствующий File Watcher. Если такой File Watcher настроен, но отключен, WebStorm отображает всплывающее окно, информирующее вас о настроенном File Watcher и предлагающее его включить.
Если в текущем проекте настроен и включен соответствующий File Watcher, WebStorm автоматически запускает компилятор при наступлении события, указанного в диалоговом окне New Watcher.
Если установлен флажок «Автосохранение отредактированных файлов для активации средства отслеживания», средство отслеживания файлов запускается, как только в исходный код вносятся какие-либо изменения.
Если флажок Автосохранение отредактированных файлов для активации средства отслеживания снят, средство отслеживания файлов запускается при сохранении (, Ctrl + S ) или при перемещении фокуса из WebStorm (при деактивации кадра).
Узнайте больше от File Watchers.
Создание наблюдателя за файлами Pug / Jade
Откройте диалоговое окно «Настройки / Предпочтения» Ctrl + Alt + S и перейдите к.
Щелкните или нажмите Alt + Insert и выберите предопределенный шаблон Pug / Jade из списка.Ваш код будет переведен на JavaScript и снабжен сгенерированными исходными картами.
В поле Program укажите путь к пакету
pug
илиjade
. Введите путь вручную или щелкните и выберите расположение файла в открывшемся диалоговом окне.Выполните действия, описанные в разделе «Наблюдатели за файлами».
Настройка подсветки синтаксиса
Вы можете настроить подсветку синтаксиса с учетом Pug / Jade в соответствии с вашими предпочтениями и привычками.
В диалоговом окне «Настройки / Предпочтения» Ctrl + Alt + S перейдите к.