構築用フォルダ構成(Gulp.ejs)
/public_html/
├ /src/
│ ├ /assets/
│ │ ├ /css/
│ │ ├ /images/
│ │ └ /movie/ , /pdf/ など
│ ├ /js/
│ │ └ /min/
│ ├ /(各コンテンツフォルダ)/
│ ├ /sass/
│ │ └style.scss など
│ ├ /template-ejs/
│ └ index.ejs
└ /dist/
.ejsファイル基本型
<%
var commonData = {
type: '###',
title: '###',
description: '###',
path: ''
};
%>
<%- include('template-ejs/_head',{common:commonData}); %>
<body id="###" class="###">
<%- include('template-ejs/_header',{common:commonData}); %>
<main>
<!-- メインコンテンツ -->
</main>
<%- include('template-ejs/_footer',{common:commonData}); %>
<%- include('template-ejs/_script',{common:commonData}); %>
</body>
</html>
.ejs条件分岐
<% if (common.type === 'index') { %>
<h1 class="l-header__logo">
<a href="<%= common.path %>"><img src="<%= common.path %>assets/images/common/logo.svg" alt="###"></a>
</h1>
<% }else{ %>
<span class="l-header__logo">
<a href="<%= common.path %>"><img src="<%= common.path %>assets/images/common/logo.svg" alt="###"></a>
</span>
<% } %>
Gulpファイル基本型(gulpfile.js)
// gulpプラグインの読み込み
const gulp = require('gulp');
const ejs = require('gulp-ejs'); //ejs
const htmlhint = require("gulp-htmlhint");
const rename = require('gulp-rename'); //ファイル出力時にファイル名を変える
const sass = require('gulp-dart-sass'); //sass
const sassGlob = require('gulp-sass-glob-use-forward');
const postcss = require('gulp-postcss'); //生成されたcssを操作する
const csscomb = require('gulp-csscomb');
const autoprefixer = require('gulp-autoprefixer'); //自動でベンダープレフィックスを付与
const htmlbeautify = require("gulp-html-beautify"); //HTML生成後のコードを綺麗にする
const plumber = require("gulp-plumber"); //エラーによるタスクの強制停止を防止
const notify = require("gulp-notify"); //デスクトップ通知
const browserSync = require("browser-sync").create(); //変更を即座にブラウザへ反映
const fs = require('fs');//JSONファイル操作用
const del = require('del'); //データ削除用
const PATH = "###/public_html/"; //作業フォルダパス
// 入出力するフォルダを指定
const srcBase = PATH + 'src';
const distBase = PATH + 'dist';
const srcPath = {
'scss': srcBase + '/sass/**/*.scss',
'css': srcBase + '/assets/css/**/*',
'img': srcBase + '/assets/images/**/*',
'js': srcBase + '/js/min/**/*.js',
'html': srcBase + '/**/*.html',
'ejs': srcBase + '/**/*.ejs',
'_ejs': '!' + srcBase + '/template-ejs/**/*.ejs',
};
const distPath = {
'css': distBase + '/assets/css',
'html': distBase + '/**/*.html',
'img': distBase + '/assets/images',
'js': distBase + '/assets/js',
};
/* clean */
const clean = () => {
return del([distPath.html], { force: true });
}
/* sass */
const cssSass = () => {
return gulp.src(srcPath.scss, {
sourcemaps: false
})
.pipe(
//エラーが出ても処理を止めない
plumber({
errorHandler: notify.onError('Error:<%= error.message %>')
}))
.pipe(sassGlob())
.pipe(sass({ outputStyle: 'expanded' }))
.pipe(autoprefixer())
.pipe(csscomb())
.pipe(gulp.dest(distPath.css)) //コンパイル先
}
/* css */
const cssFunc = () =>{
return gulp.src(srcPath.css, {
since: gulp.lastRun(cssFunc)
})
.pipe(gulp.dest(distPath.css))
}
/* html */
const htmlFunc = () => {
return gulp.src(srcPath.html, {
since: gulp.lastRun(htmlFunc)
})
.pipe(htmlhint())
.pipe(htmlhint.reporter())
.pipe(gulp.dest(distBase))
}
/* ejs */
const ejsFunc = () => {
return gulp.src([srcPath.ejs, srcPath._ejs])
.pipe(ejs())
.pipe(rename({
extname: '.html' //拡張子
}))
.pipe(gulp.dest(distBase))
}
/* image */
const imgFunc = () => {
return gulp.src(srcPath.img, {
since: gulp.lastRun(imgFunc)
})
.pipe(gulp.dest(distPath.img))
}
/* js */
const jsFunc = () => {
return gulp.src(srcPath.js, {
since: gulp.lastRun(jsFunc)
})
.pipe(gulp.dest(distPath.js))
}
/* ローカルサーバー立ち上げ */
const browserSyncFunc = () => {
browserSync.init(browserSyncOption);
}
const browserSyncOption = {
server: { baseDir: distBase },
port: 7878,
directoryListing: true
}
/* リロード */
const browserSyncReload = (done) => {
browserSync.reload();
done();
}
/* ファイルの変更時にbrowserSyncReloadする */
const watchFiles = () => {
gulp.watch(srcPath.scss, gulp.series(cssSass, browserSyncReload))
gulp.watch(srcPath.css, gulp.series(cssFunc, browserSyncReload))
gulp.watch(srcPath.img, gulp.series(imgFunc, browserSyncReload))
gulp.watch(srcPath.ejs, gulp.series(htmlFunc, browserSyncReload))
gulp.watch(srcPath.ejs, gulp.series(ejsFunc, browserSyncReload))
gulp.watch(srcPath.js, gulp.series(jsFunc, browserSyncReload))
}
exports.default = gulp.series(
clean,
gulp.parallel(cssSass, cssFunc, htmlFunc, ejsFunc, jsFunc),
gulp.parallel(watchFiles, browserSyncFunc)
);
exports.build = gulp.series(
clean,
gulp.parallel(cssSass, cssFunc, htmlFunc, ejsFunc, imgFunc, jsFunc),
);