Spec-Zone.ru › Pug

Миграция на Pug 2

Pug 2 был выпущен в августе 2016 года. Для внесения улучшений в новую версию нам пришлось принять решение об устаревании или удалении некоторых API и недокументированных языковых функций. Мы постарались сделать эти изменения максимально незаметными, и многие из этих изменений ранее были отговаривались в предупреждениях консоли.

В этой статье подробно описано, как можно преобразовать ваше приложение с Jade в Pug v2.

Переименование проекта

Из-за проблемы с товарным знаком имя проекта было изменено с «Jade» на «Pug» в связи с выпуском Pug 2. Это также означает, что мы изменили официальное поддерживаемое расширение файлов с .jade на .pug. Хотя .jade всё ещё поддерживается, оно устарело. Все пользователи должны перейти на .pug немедленно.

Удаленные языковые функции

Большинство этих удалений могут быть автоматически обнаружены pug-lint, нашим официальным линтером.

Устаревший вызов миксина

//- old

mixin foo('whatever')
//- new

+foo('whatever')

Мы удалили устаревшую синтаксическую конструкцию для вызова миксина, чтобы упростить различение объявлений и вызовов. (Все использования старого синтаксиса вызывали предупреждения в Jade v1.)

Интерполяция атрибутов

//- old

a(href='#{link}')

a(href='before#{link}after')
//- new

a(href=link)

//- (on Node.js/io.js ≥ 1.0.0)
a(href=`before${link}after`) 
//- (everywhere)
a(href='before' + link + 'after')

Мы удалили поддержку интерполяции в атрибутах, так как реализация была излишне сложной, и эта функция нередко мешала пользователям узнать, что они могут просто использовать любое значение JavaScript вместо атрибутов. Обратитесь к нашей документации по атрибутам для получения дополнительной информации о синтаксисе атрибутов.

Префиксный синтаксис each

//- old

- each a in b
  = a

- for a in b
  = a
//- new

each a in b
  = a

for a in b
  = a

each не является частью синтаксиса JavaScript, поэтому использование each «ключевого слова» в строке JavaScript является запутанным и некрасивым (с точки зрения реализации). То же самое относится к for ключевому слову без скобок.

Просто удалите -, и ваш код должен снова работать.

Удаленный API

Эти экспортируемые свойства и параметры компиляции были удалены. В вашем приложении убедитесь, что вы не используете эти API.

Свойства

DOCTYPE

doctype

Ранее недокументированный объект jade.doctype содержал хэш сокращений доктайпов. Расширяя этот объект, пользователи могли создавать дополнительные или изменять существующие сокращения доктайпов.

В Pug v2 этот объект был разделен от Pug в пакет doctypes. Чтобы расширить сокращения доктайпов, вы можете написать плагин codeGen.

Узлы

nodes

Ранее недокументированный объект jade.nodes содержал хэш классов, которые служат конструктором узлов (также недокументированного) абстрактного синтаксического дерева Jade. В Pug v2 мы отказались от этого подхода в пользу утиной типизации, используя свойство type в узлах AST.

Самозакрывающиеся теги

selfClosing

Ранее недокументированный массив jade.selfClosing мог использоваться для расширения или изменения поведения самозакрывающихся тегов.

В Pug v2 этот массив был разделен от Pug в пакет void-elements. Чтобы изменить этот массив, вы можете написать плагин codeGen.

Утилиты

utils

Ранее недокументированный объект jade.utils содержал три функции, полезные для внутренних частей движка шаблонов.

utils.merge был удален из Pug, так как он больше не используется. Его функциональность можно приблизительно воспроизвести, используя метод ES2015 Object.assign, среди других вариантов.

utils.stringify был разделен от Pug в пакет js-stringify, с дополнительной защитой от возможных атак XSS. Все пользователи должны использовать этот пакет.

utils.walkAST был разделен в пакет pug-walk.

Компилятор, лекссер, парсер

Compiler, Lexer, Parser

Ранее недокументированные классы Jade compiler, lexer, и parser экспортировались через эти свойства. Пользователи могли создавать собственные компиляторы, лекссеры и парсеры, производные от этих классов, чтобы настроить поведение компиляции.

Pug v2 позволяет настраивать процесс компиляции с помощью плагинов, и эти экспортируемые свойства теперь удалены.

Эквиваленты классов в Pug v2 теперь являются частью пакетов pug-code-gen, pug-lexer, и pug-parser, с различными несовместимыми изменениями.

Параметры

Компилятор, лекссер, парсер 2

compiler, lexer, parser

Эти параметры использовались вместе с удаленными Compiler, Lexer, и Parser классами.

Клиент

client

Параметр client использовался для компиляции клиентских функций. Он устарел в пользу функции compileClient в 2013 году, и его использование предупреждалось с тех пор.

© Pug authors
Licensed under the MIT license.
https://pugjs.org/api/migration-v2.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API