前提・実現したいこと
gulp+ejsで静的HTMLを作っています。
各ページのmeta情報を外部のjsonファイルに持たせておいて、
ejsで該当のデータを読み込むようにしたかったのですがうまく動きません。
発生している問題・エラーメッセージ
明確なエラーは出ず、
Starting 'ejs' ... Finished 'ejs' after 1.51ms undefined
このようにタスクを処理した後undefined
とだけ表示されて
JSONの読み込みに失敗しているようです。
該当のソースコード
json
1//data.json 2{ 3 "default": { 4 "sitename": "サイト名", 5 "title": "ページタイトル", 6 "description": "Your Site Description", 7 "rootUrl": "/", 8 "imgPath": "/assets/img/", 9 "ogpImage": "http://example.com/ogp-image.jpg", 10 "url": "http://example.com/", 11 "type": "article" 12 }, 13 14 "home": { 15 "title": "サイト名(ホーム用)", 16 "description": "Description(ホーム用)", 17 "type": "website" 18 }, 19 20 "under": { 21 "title": "サイト名(下層用)", 22 "description": "Description(下層用)" 23 }
gulpfile
1const gulp = require("gulp"); 2const fs = require( 'fs' ); 3const ejs = require("gulp-ejs"); 4const rename = require('gulp-rename'); 5const dir = { 6 src: './src/', 7 dist: './dist/' 8}; 9//gulp-ejs 10gulp.task('ejs', function(done){ 11 const json_path = "./src/ejs/data.json"; 12 const json = JSON.parse(fs.readFileSync(json_path)); 13 14 gulp.src([dir.src + 'ejs/**/*.ejs', '!' + dir.src + 'ejs/**/_*.ejs']) 15 .pipe(plumber({ 16 errorHandler: function(err) { 17 console.log(err.messageFormatted); 18 this.emit('end'); 19 } 20 })) 21 .pipe(ejs({data:json})) 22 .pipe(rename({extname: '.html'})) 23 .pipe(gulp.dest(dir.dist)) 24 .pipe(browser.reload({stream:true})); 25 done(); 26});
ejs
1//_head.ejs 2 3<% 4 var _default = json['default']; 5 for ( var key in _default ) { 6 if ( typeof page[key] === 'undefined' ) { 7 page[key] = _default[key]; 8 } 9 } 10-%> 11//〜省略〜 12<title><%= page['title'] %></title> 13<meta name="description" content="<%= page['description'] %>"> 14 15<meta name="viewport" content="width=device-width,initial-scale=1.0"> 16<meta name="format-detection" content="telephone=no"> 17 18<!-- ogp --> 19<meta property="og:title" content="<%= page['title'] %>"> 20<meta property="og:type" content="<%= page['type'] %>"> 21<meta property="og:url" content="<%= page['url'] %>"> 22<meta property="og:image" content="<%= page['ogpImage'] %>"> 23<meta property="og:site_name" content="<%= page['sitename'] %>"> 24<meta property="og:description" content="<%= page['description'] %>">
index
1//index.ejs 2<%- 3 include('./inc/_head', { 4 page: json['home'] 5 }); 6%>
試したこと
参考:ejsでjsonを読み込みmeta情報を一括管理
参考:EJS:JSONファイルを利用してタイトルやメタ情報を管理しやすくする方法
この辺を参考にしてコードを記述し、
比較して見直してみましたが、何が悪いのか分かりませんでした。
エラーが出てくれればまだあたりもつけられるのですが、undefined
だけだと
どこを検討すればいいのか分からず困っております。
補足情報(FW/ツールのバージョンなど)
node: v12.2.0
gulp: v4.0.2
gulp-ejs: v4.1.2
その他不足している情報がありましたらご一報ください。
よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/06 06:00
2019/11/06 12:43