Pug 2への移行
Pug 2は2016年8月にリリースされました。新しいリリースでの改善を可能にするために、いくつかのAPIと文書化されていない言語機能を廃止または削除するという決定を下しました。これらの変更は可能な限り影響が少ないように努め、これらの変更の多くは、以前はコンソール警告で非推奨とされていました。
この記事では、アプリケーションをJadeからPug v2に変換する方法について詳しく説明します。
プロジェクト名の変更
商標の問題により、プロジェクト名はPug 2のリリースに合わせて「Jade」から「Pug」に変更されました。これは、公式にサポートされているファイル拡張子が.jadeから.pugに変更されたことも意味します。 .jadeはまだサポートされていますが、非推奨です。すべてのユーザーはすぐに.pugに移行することをお勧めします。
削除された言語機能
これらの削除のほとんどは、公式のリンターであるpug-lintによって自動的に検出できます。
従来のMixin呼び出し
//- old
mixin foo('whatever')//- new
+foo('whatever')宣言と呼び出しを区別しやすくするために、Mixinを呼び出すための従来の構文を削除しました。(古い構文を使用すると、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
= aeachはJavaScriptの構文の一部ではないため、JavaScript行でeach「キーワード」を使用すると、混乱を招き、実装の面でもハック的です。括弧のないforキーワードにも同じことが当てはまります。
単に-を削除すれば、コードは再び動作するはずです。
削除されたAPI
これらのエクスポートされたプロパティとコンパイルオプションは削除されました。アプリケーションでこれらのAPIを使用していないことを確認してください。
プロパティ
doctype
以前は、文書化されていないjade.doctypeオブジェクトには、DOCTYPEショートカットのハッシュが含まれていました。このオブジェクトを拡張することで、ユーザーはDOCTYPEショートカットを追加または変更できました。
Pug v2では、このオブジェクトはPugからdoctypesパッケージに分割されました。DOCTYPEショートカットを拡張するには、codeGenプラグインを作成できます。
nodes
以前は、文書化されていないjade.nodesオブジェクトには、(これも文書化されていない)Jade抽象構文木のノードのコンストラクタとして機能するクラスのハッシュが保持されていました。Pug v2では、ASTノードの`type`プロパティを使用したダックタイピングを支持して、このアプローチを放棄しました。
selfClosing
以前は、文書化されていないjade.selfClosing配列を使用して、自己終了タグの動作を拡張または変更できました。
Pug v2では、この配列はPugからvoid-elementsパッケージに分割されました。この配列を変更するには、codeGenプラグインを作成できます。
utils
以前は、文書化されていないjade.utilsオブジェクトには、テンプレートエンジンの内部に役立つ3つの関数が含まれていました。
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パッケージの一部となり、さまざまな非互換性の変更があります。
オプション
compiler、lexer、parser
これらのオプションは、削除されたCompiler、Lexer、およびParserクラスと組み合わせて使用されました。
client
clientオプションは、クライアント関数コンパイルに使用されました。 2013年にcompileClient関数の代わりに非推奨となり、それ以降、使用に対して警告が表示されていました。