LoginSignup
2
0

More than 3 years have passed since last update.

VSCode で EJS のフォーマットを正しく整形されるようにする

Last updated at Posted at 2021-02-24

問題

Node.js のデザインテンプレートに EJS を使用しています。
ヘッダーなどを全画面で共通部品化したいので、こんな感じのファイルを書いています。

index.ejs
<% function scripts (buf) { %>
    <script src="test.js" />
<% }; %>

<% function content(buf) { %>
    <h1>コンテンツタイトル</h1>
    <p>本文</p>
<% }; %>

<% include ../layout/layout %>

※共通部品化をする方法についてはこちらを参考にさせていただきました。
 大変参考になりました。ありがとうございます。

保存時に自動フォーマットをする設定にしているのですが、こんな感じで崩れて整形されてしまいます。

index.ejs
<% function scripts (buf) { %>
    <script src="test.js" />
    <% }; %>

        <% function content(buf) { %>
            <h1>コンテンツタイトル</h1>
            <p>本文</p>
            <% }; %>

                <% include ../layout/layout %>

どこでJavaScriptのブロックが閉じているかを判別できないんですね。困った。

ネット上の回答

対処法を検索したところ、「ejsファイルをhtmlとしてフォーマットさせる」という記述が見つかりました。
しかし、残念ながら私の環境では解決できませんでした。

解決方法

下記のように、閉じタグのようなもの「</%>」を挟むことで綺麗に整形されるようになりました。

index.ejs
<% function scripts (buf) { %>
    <script src="test.js" />
</%>
<% }; %></%>

<% function content(buf) { %>
    <h1>コンテンツタイトル</h1>
    <p>本文</p>
</%>
<% }; %></%>

<% include ../layout/layout %></%>

問題点

下記の問題が残っています。

  • コード整形のためだけのコードを記載しないといけない
    • 短いとはいえ、JavaScriptの感覚でコードを読んでいると少し気になります。
  • コンパイルされたHTMLに不要なコードが生成されてしまう
    • 下記画像のように、<!--%-->という行が生成されてしまいます。実行上影響はないですが気になります。 html実行結果.PNG

最後に

自動フォーマットは手放せないため、この方法を採用することにします。
もし良い方法をご存じの方がいらっしゃったら教えて下さい。

参考リンク(ありがとうございました)

ejsでextendっぽいことをする方法

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0