pugで効率化【実用編3】

Pocket

今回はgulpのファイル構成の一例をまとめます。

〇下記のようなファイル構成でプロジェクト作成します。

プロジェクトファイル
|___ package.json
|___ package-lock.json
|___ gulpfile.js
|___ node_modules
|
|___ pug
|    |___ _layout.pug
|    |___ _header.pug
|    |___ _footer.pug
|    |___ _meta.pug
|    |___ index.pug
|    |___ file01
|         |___ index.pug
|
|___ sass
|    |___ common.scss
|    |___ index.scss
|    |___ file01
|         |___index.scss
|
|___ images
|    |___demo.jpg
|    |___file01
|        |___demo01.jpg
|
|___ www
     |___ css
     |    |___index.css
     |    |___common.css
     |    |___file01
     |        |___index.css
     |
     |___images
     |   |___demo.jpg
     |   |___file01
     |       |___demo01.jpg    
     |
     |___index.html
     |___file01
         |___index.html

○gulpfile.js

//plug-in
var gulp = require('gulp');
var plumber = require('gulp-plumber');
var autoprefixer = require('gulp-autoprefixer');
var sass = require("gulp-sass");
var pug = require('gulp-pug');
var imagemin = require('gulp-imagemin');
var pngquant = require('imagemin-pngquant');
var mozjpeg  = require('imagemin-mozjpeg');


//sass 
gulp.task("sass", function() {
    return gulp.src('sass/**/*.scss')
        .pipe(plumber())
        .pipe(sass())
        .pipe(autoprefixer({
        cascade: false/*整形off*/
      }))
        .pipe(gulp.dest("www/css"));
});

//pug
gulp.task("pug", function() {
    return gulp.src('pug/**/[^_]*.pug')
        .pipe(plumber())
        .pipe(pug({
          pretty: true
        }))
        .pipe(gulp.dest("www"));
});

//images
gulp.task('imagemin',function(){
    return gulp.src(['images/**/*'])
    .pipe(imagemin(
        [
          pngquant({ 
            quality: [ 0.65, 0.8 ],
            speed: 1 
          }),
          mozjpeg({ quality: 80 }),
          imagemin.svgo(),
          imagemin.gifsicle()
        ]
    ))
    .pipe(gulp.dest('www/images'));
});


//watch
gulp.task('watch', function(){
    gulp.watch('sass/**/*.scss', gulp.task('sass'));
    gulp.watch('pug/**/*.pug', gulp.task('pug'));
    gulp.watch('images/**/*', gulp.task('imagemin'));
});

gulp.task('default', gulp.parallel('sass', 'pug', 'imagemin', 'watch'));

<ポイント>

・pug、sass、imagesのいずれも処理をpipeで繋いでいるだけなので、シンプルな関数です。

・それぞれの出力先をdestで記述している。pugはwww、sassはwww/css、imagesはwww/imagesに出力。

○pug/index.pug

extends _layout.pug

block _addMeta

  - var path ='';

  //-meta
  title タイトルだよ
  meta(name="description", content="ディスクリプションだよ")
  meta(name="keywords", content="キーワード1, キーワード2")
  meta(name="viewport", content="width=device-width, initial-scale=1.0")
  link(rel="stylesheet" href=`${path}`+"css/common.css")
  link(rel="stylesheet" href=`${path}`+"css/index.css")


block mainContents
  main(ontouchstart="")
    .block
      p.title トップなうだよ
      img(src=`${path}`+"images/demo.jpg")
      a(href=`${path}`+"index.html") トップページ
      a(href=`${path}`+"file01/index.html") ファイル01

○pug/file01/index.pug

extends ../_layout.pug

block _addMeta

  - var path ='../';

  //-meta
  title タイトルだよ
  meta(name="description", content="ディスクリプションだよ")
  meta(name="keywords", content="キーワード1, キーワード2")
  meta(name="viewport", content="width=device-width, initial-scale=1.0")
  link(rel="stylesheet" href=`${path}`+"css/common.css")
  link(rel="stylesheet" href=`${path}`+"css/file01/index.css")


block mainContents
  main(ontouchstart="")
    .block
      p.title ファイル01なうだよ
      img(src=`${path}`+"images/file01/demo01.jpg")
      a(href=`${path}`+"index.html") トップページ
      a(href="index.html") ファイル01

<ポイント>

・プロジェクトが複雑化すれば、ディレクトリは階層が深くなっていきます。その際に、パスをいちいち指定していては大変なので、変数を利用して一括で設定します。

 – var path =”;で変数を定義

①一番上の階層にあるindex.pugの際は、pathは何も入力しなくてOKです。

②次にfile01の階層にあるindex.pugの際は、一番の上の階層より一つ下の階層にあたるのでpathに ‘../’ を設定する。※file01/index.pugから見ると_layout.pugは一つ上の階層にあるので一行目の_layoutにも../をつけるの忘れずに。

③あとは、ディレクトリの記述が必要な箇所には `${path}`+“〇〇” でパスを指定してあげれば一括でパスの設定が可能です。

これで、gulpでプロジェクトもさくさくつくれますね。

細かい設定が分からない場合はこちらの過去記事を読んでみてください。

今回は以上です。