ご質問をお願いいたします。
gulp-ejsでejsをhtmlにコンパイルするため、ググりながらgulpfile.jsを作成してみました。
本来でしたら下記フォルダ構造の画像内distフォルダにhtmlが出力されるはずがしてくれません。
gulpfile.js内にはgulp-ejs以外も入っていますが、他は動作しているようです。
(下記、npx gulp実行時の画像参照)
コマンドラインから「npx gulp」を実行したところ、エラー発生せず、gulp.watchで取得したブラウザ画面はCannot GET /と表示されてしまいます。
原因が分からないため、ご教授いただけましたら幸いです。
以下、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}
長々と恐縮ですが、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。