質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Pug

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1899閲覧

webpack5のpugで変数を取得できない

umesister

総合スコア0

Pug

Pug(旧Jade)とは、HTMLを書くためのテンプレートエンジン。タグで囲む必要がないなど記述を省略できるため、HTMLの記述が簡単になります。ファイル分割も可能で、変数やループなど便利な機能も備わっています。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/10/13 11:07

編集2021/10/18 09:30

前提・実現したいこと

webpack環境でA.pugというファイルで_B.pugで定義している変数を呼び出したい。

発生している問題・エラーメッセージ

webpack5でPugの変数を使う際に別ファイルで定義している変数を呼び出す(include)と以下のようなエラーが表示され、
変数の値が取得・展開できません。

ERROR in Template execution failed: TypeError: Cannot read property 'name' of undefined ERROR in TypeError: Cannot read property 'name' of undefined - A.pug:16 /Users//webpack_sample_v1_pug/src/pug/A.pug:16:471 - A.pug:16 template /Users//webpack_sample_v1_pug/src/pug/A.pug:16:2110 - index.js:450 [webpack_sample_v1_pug]/[html-webpack-plugin]/index.js:450:16 - task_queues.js:97 processTicksAndRejections internal/process/task_queues.js:97:5 - async Promise.all

該当のソースコード

_B.pug

pug

1//- _B.pug 2- var site = {}; 3 - site.name = 'サイト名';

A.pug

pug

1// A.pug 2include /_B.pug 3doctype html 4html(lang="jp") 5 head 6 meta(charset="UTF-8") 7 meta(http-equiv="X-UA-Compatible", content="IE=edge") 8 meta(name="viewport", content="width=device-width, initial-scale=1.0") 9 title= site.name // ここの変数を取得できない 10 body 11 script(src="./js/bundle.js")

webpackファイル

webpack.config.js

javascript

1// webpack.config.js 2const path = require("path"); 3const MODE = "development"; 4const globule = require("globule"); 5const HtmlWebpackPlugin = require("html-webpack-plugin"); 6const webpack = require("webpack"); 7 8const app = { 9 mode: MODE, 10 entry: ["./src/js/index.js"], 11 output: { 12 path: path.resolve(__dirname, "dist"), 13 14 filename: "./js/bundle.js", 15 }, 16 devtool: "source-map", 17 module: { 18 rules: [ 19 { 20 test: /.js$/, 21 use: [ 22 { 23 loader: "babel-loader", 24 options: { 25 presets: ["@babel/preset-env"], 26 }, 27 }, 28 ], 29 }, 30 { 31 test: /.pug$/, 32 use: [ 33 { 34 loader: "pug-loader", 35 options: { 36 pretty: true, 37 root: path.resolve(__dirname, "src/pug"), 38 }, 39 }, 40 ], 41 }, 42 ], 43 }, 44 devServer: { 45 static: { 46 watch: true, 47 directory: `${__dirname}/src`, 48 }, 49 50 open: true, 51 }, 52 plugins: [ 53 new webpack.ProvidePlugin({ 54 $: "jquery", 55 }), 56 ], 57 58 target: ["web", "es5"], 59 devtool: "source-map", 60 watchOptions: { 61 ignored: /node_modules/, 62 }, 63}; 64 65const templates = globule.find("./src/pug/**/*.pug", { 66 ignore: ["./src/pug/**/_*.pug"], 67}); 68 69templates.forEach((template) => { 70 const fileName = template.replace("./src/pug/", "").replace(".pug", ".html"); 71 app.plugins.push( 72 new HtmlWebpackPlugin({ 73 filename: `${fileName}`, 74 template: template, 75 inject: false, 76 minify: false, 77 }) 78 ); 79}); 80 81module.exports = app; 82

package.json

json

1{ 2 "scripts": { 3 "build": "webpack --mode production", 4 "dev": "webpack --mode development", 5 "watch": "webpack --mode development --watch", 6 "start": "webpack serve --mode development" 7 }, 8 "devDependencies": { 9 "@babel/core": "^7.15.5", 10 "@babel/preset-env": "^7.15.6", 11 "autoprefixer": "^10.3.7", 12 "babel-loader": "^8.2.2", 13 "copy-webpack-plugin": "^9.0.1", 14 "css-loader": "^6.2.0", 15 "globule": "^1.3.3", 16 "html-webpack-plugin": "^5.3.2", 17 "html-webpack-pug-plugin": "^3.0.0", 18 "mini-css-extract-plugin": "^2.3.0", 19 "path": "^0.12.7", 20 "postcss": "^8.3.9", 21 "postcss-loader": "^6.1.1", 22 "pug": "^2.0.4", 23 "pug-loader": "^2.4.0", 24 "sass": "^1.39.2", 25 "sass-loader": "^12.1.0", 26 "style-loader": "^3.2.1", 27 "webpack": "^5.52.1", 28 "webpack-cli": "^4.8.0", 29 "webpack-dev-server": "^4.2.0" 30 }, 31 "dependencies": { 32 "jquery": "^3.6.0" 33 }, 34 "browserslist": [ 35 "> 3% in JP", 36 "ie 11", 37 "android 4.4", 38 "last 1 versions" 39 ] 40}

ディレクトリ構造

ディレクトリ構造
※distも同じ階層構造です。

試したこと

・A.pug内で変数を定義、そして展開すると問題なくコンパイルができました。
・_B.pugで変数作成・タグに変数の値を代入した状態で、includeすると展開ができました。※下記参照願います。

pug

1// _B.pug 2- var text = 'サンプル';

pug

1// A.pug 2 3@include _B.pug 4// 結果 'サンプル'が表示される 5

どうかよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

runnynose

2021/10/20 07:14

試して回答しているわけではないんですけど、気になった点を記載します。 > - site.name = 'サイト名'; ここの記述でインデントが入っているんですけど、これは関係ないですかね??
umesister

2021/10/22 10:47

コメントありがとうございます。 こちらは問題ないですね。^^;
guest

回答1

0

自己解決

webpack.config.jsでグローバル変数を定義すると渡せました。

投稿2021/10/22 10:49

umesister

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問