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

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

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

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

Q&A

解決済

1回答

2643閲覧

gulp-ejsでhtmlファイルがコンパイルできない

nishinoya_eng

総合スコア45

EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

0グッド

0クリップ

投稿2021/04/12 14:10

編集2021/04/12 14:13

ご質問をお願いいたします。
gulp-ejsでejsをhtmlにコンパイルするため、ググりながらgulpfile.jsを作成してみました。
本来でしたら下記フォルダ構造の画像内distフォルダにhtmlが出力されるはずがしてくれません。
gulpfile.js内にはgulp-ejs以外も入っていますが、他は動作しているようです。
(下記、npx gulp実行時の画像参照)

コマンドラインから「npx gulp」を実行したところ、エラー発生せず、gulp.watchで取得したブラウザ画面はCannot GET /と表示されてしまいます。

原因が分からないため、ご教授いただけましたら幸いです。

フォルダ構造
フォルダ構造

npx gulp実行時
![イnpx gulp実行時

以下、gulpfile.jsソースコード

Javescript

1const gulp = require('gulp');//gulp本体 2const del = require('del'); 3 4//ejs 5const rename = require('gulp-rename'); //名前変更 6const ejs = require('gulp-ejs'); //ejsコンパイル 7const replace = require("gulp-replace"); 8 9//scss 10const sass = require('gulp-dart-sass');//Dart Sass はSass公式が推奨 @use構文などが使える 11const plumber = require("gulp-plumber"); // エラーが発生しても強制終了させない 12const notify = require("gulp-notify"); // エラー発生時のアラート出力 13const browserSync = require("browser-sync"); //ブラウザリロード 14const autoprefixer = require('gulp-autoprefixer');//ベンダープレフィックス自動付与 15const postcss = require("gulp-postcss");//css-mqpackerを使うために必要 16const mqpacker = require('css-mqpacker');//メディアクエリをまとめる 17 18 19//画像圧縮 20const imagemin = require("gulp-imagemin"); 21const imageminMozjpeg = require("imagemin-mozjpeg"); 22const imageminPngquant = require("imagemin-pngquant"); 23const imageminSvgo = require("imagemin-svgo"); 24 25 26// 入出力するフォルダを指定 27const srcBase = './_static/src'; 28const distBase = './_static/dist'; 29 30 31const srcPath = { 32 'html': srcBase + ["/ejs/**/*.ejs", "!" + "/ejs/**/_*.ejs"], 33 'scss': srcBase + '/scss/**/*.scss', 34 'img': srcBase + '/img/**/*' 35}; 36 37const distPath = { 38 'css': distBase + '/css/', 39 'html': distBase + '/', 40 'img': distBase + '/img/' 41}; 42 43/** 44 * clean 45 */ 46const clean = () => { 47 return del(distBase + '/**'); 48} 49 50//ベンダープレフィックスを付与する条件 51const TARGET_BROWSERS = [ 52 'last 2 versions',//各ブラウザの2世代前までのバージョンを担保 53 'ie >= 11'//IE11を担保 54]; 55 56/** 57 * ejs 58 * 59 */ 60 61const htmlEjs = () => { 62 return gulp.src(srcPath.html) 63 .pipe( 64 //エラーが出ても処理を止めない 65 plumber({ 66 errorHandler: notify.onError('Error:<%= error.message %>') 67 })) 68 .pipe(ejs({}, {}, { ext: ".html" })) //ejsを纏める 69 .pipe(rename({ extname: ".html" })) //拡張子をhtmlに 70 .pipe(replace(/[\s\S]*?(<!DOCTYPE)/, "$1")) 71 .pipe(gulp.dest(distPath.html)) 72}; 73 74console.log(srcPath.html); 75 76/** 77 * sass 78 * 79 */ 80 81const cssSass = () => { 82 return gulp.src(srcPath.scss, { 83 sourcemaps: true 84 }) 85 .pipe( 86 //エラーが出ても処理を止めない 87 plumber({ 88 errorHandler: notify.onError('Error:<%= error.message %>') 89 })) 90 .pipe(sass({ 91 outputStyle: 'expanded' 92 })) //指定できるキー expanded compressed 93 .pipe(autoprefixer(TARGET_BROWSERS))// ベンダープレフィックス自動付与 94 .pipe(postcss([mqpacker()])) // メディアクエリをまとめる 95 .pipe(gulp.dest(distPath.css, { 96 sourcemaps: './' 97 })) //コンパイル先 98 .pipe(browserSync.stream()) 99 .pipe(notify({ 100 message: 'Sassをコンパイルしました!', 101 onLast: true 102 })) 103} 104 105/** 106 * 画像圧縮 107 */ 108const imgImagemin = () => { 109 return gulp.src(srcPath.img) 110 .pipe( 111 imagemin( 112 [ 113 imageminMozjpeg({ 114 quality: 80 115 }), 116 imageminPngquant(), 117 imageminSvgo({ 118 plugins: [{ 119 removeViewbox: false 120 }] 121 }) 122 ], { 123 verbose: true 124 } 125 ) 126 ) 127 .pipe(gulp.dest(distPath.img)) 128} 129 130/** 131 * ローカルサーバー立ち上げ 132 */ 133const browserSyncFunc = () => { 134 browserSync.init(browserSyncOption); 135} 136 137const browserSyncOption = { 138 server: "./_static/dist/" 139} 140 141/** 142 * リロード 143 */ 144const browserSyncReload = (done) => { 145 browserSync.reload(); 146 done(); 147} 148 149/** 150 * 151 * ファイル監視 ファイルの変更を検知したら、browserSyncReloadでreloadメソッドを呼び出す 152 * series 順番に実行 153 * watch('監視するファイル',処理) 154 */ 155const watchFiles = () => { 156 gulp.watch(srcPath.html, gulp.series(htmlEjs, browserSyncReload)) 157 gulp.watch(srcPath.scss, gulp.series(cssSass)) 158 gulp.watch(srcPath.img, gulp.series(imgImagemin, browserSyncReload)) 159} 160 161/** 162 * seriesは「順番」に実行 163 * parallelは並列で実行 164 * 165 * 一度cleanでdistフォルダ内を削除し、最新のものをdistする 166 */ 167exports.default = gulp.series( 168 clean, 169 gulp.parallel(htmlEjs, cssSass, imgImagemin), 170 gulp.parallel(watchFiles, browserSyncFunc) 171);

以下、package.jsonソースコード

JavaScript

1{ 2 "name": "template", 3 "version": "1.0.0", 4 "main": "index.js", 5 "scripts": { 6 "test": "echo \"Error: no test specified\" && exit 1" 7 }, 8 "keywords": [], 9 "author": "", 10 "license": "ISC", 11 "dependencies": { 12 "browser-sync": "^2.26.14", 13 "css-mqpacker": "^7.0.0", 14 "del": "^6.0.0", 15 "gulp-autoprefixer": "^7.0.1", 16 "gulp-dart-sass": "^1.0.2", 17 "gulp-imagemin": "^7.1.0", 18 "gulp-notify": "^3.2.0", 19 "gulp-plumber": "^1.2.1", 20 "gulp-postcss": "^9.0.0", 21 "imagemin-mozjpeg": "^9.0.0", 22 "imagemin-pngquant": "^9.0.2", 23 "imagemin-svgo": "^9.0.0" 24 }, 25 "devDependencies": { 26 "gulp": "^4.0.2", 27 "gulp-ejs": "^5.1.0", 28 "gulp-rename": "^2.0.0", 29 "gulp-replace": "^1.0.0" 30 }, 31 "description": "" 32}

長々と恐縮ですが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

明確な原因は不明ですが
1から構築し直すことで、自己解決しました。

参考リンク

投稿2021/04/14 23:53

nishinoya_eng

総合スコア45

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問