質問編集履歴

1

gulpfileの中身を記述

2020/02/20 00:19

投稿

job_ao
job_ao

スコア5

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Gulpを使用し、UIkitのscssをインポート、さらに自身で書いたscssファイルをインポートし、
8
8
 
9
- 1つのcssとして出力して使いたいです。
9
+ 1つのcss(style.css)として出力して使いたいです。
10
10
 
11
11
 
12
12
 
@@ -14,7 +14,9 @@
14
14
 
15
15
  変数が上手く読み込めていないようです。
16
16
 
17
- variables-theme.scssで数値を変更した場合、反映はされています
17
+ variables-theme.scssで数値を変更した場合、反映はされていますが、
18
+
19
+ Gulpで動かしている時のみ表示されており、cssはきちんと出力されていないようです。
18
20
 
19
21
  どのようにしたら、エラーが解消するのでしょうか。
20
22
 
@@ -78,9 +80,411 @@
78
80
 
79
81
 
80
82
 
83
+ gulpfileはこのようになっています
84
+
81
- ```ここ言語名を入力
85
+ 以下を参考しました。
86
+
82
-
87
+ https://yumegori.com/gulp4-setting20191025
88
+
89
+
90
+
91
+ ```
92
+
93
+ //gulpとgulpのパッケージを読み込み
94
+
95
+ const { src, dest, watch, lastRun, parallel, series } = require("gulp");
96
+
97
+ const sass = require("gulp-sass");
98
+
99
+ const glob = require("gulp-sass-glob");
100
+
101
+ const postcss = require("gulp-postcss");
102
+
103
+ const autoprefixer = require("autoprefixer");
104
+
105
+ const plumber = require("gulp-plumber");
106
+
107
+ const notify = require("gulp-notify");
108
+
109
+ const htmlmin = require("gulp-htmlmin");
110
+
111
+ const del = require("del");
112
+
113
+ const ejs = require("gulp-ejs");
114
+
115
+ const concat = require("gulp-concat");
116
+
117
+ const order = require("gulp-order");
118
+
119
+ const rename = require("gulp-rename");
120
+
121
+ const cleanCSS = require("gulp-clean-css");
122
+
123
+ const pngquant = require("imagemin-pngquant");
124
+
125
+ const imagemin = require("gulp-imagemin");
126
+
127
+ const mozjpeg = require("imagemin-mozjpeg");
128
+
129
+ const uglify = require("gulp-uglify");
130
+
131
+ const browserSync = require("browser-sync");
132
+
133
+ const replace = require("gulp-replace");
134
+
135
+
136
+
137
+ //開発と本番で処理を分ける
138
+
139
+ //今回はhtmlの処理のところで使っています
140
+
141
+ const mode = require("gulp-mode")({
142
+
143
+ modes: ["production", "development"],
144
+
145
+ default: "development",
146
+
147
+ verbose: false
148
+
149
+ });
150
+
151
+
152
+
153
+ //読み込むパスと出力するパスを指定
154
+
155
+ const srcPath = {
156
+
157
+ html: {
158
+
159
+ src: ["./src/_ejs/**/*.ejs", "!" + "./src/_ejs/**/_*.ejs"],
160
+
161
+ dist: "./dist/"
162
+
163
+ },
164
+
165
+ styles: {
166
+
167
+ src: "./src/_scss/**/*.scss",
168
+
169
+ dist: "./dist/assets/css/",
170
+
171
+ map: "./dist/assets/css/map"
172
+
173
+ },
174
+
175
+ scripts: {
176
+
177
+ src: "./src/_js/**/*.js",
178
+
179
+ dist: "./dist/assets/js/",
180
+
181
+ map: "./dist/assets/js/map",
182
+
183
+ core: "src/js/core/**/*.js",
184
+
185
+ app: "src/js/app/**/*.js"
186
+
187
+ },
188
+
189
+ images: {
190
+
191
+ src: "./src/img/**/*.{jpg,jpeg,png,gif,svg}",
192
+
193
+ dist: "./dist/assets/img/"
194
+
195
+ }
196
+
197
+ };
198
+
199
+
200
+
201
+ //htmlの処理自動化
202
+
203
+ const htmlFunc = () => {
204
+
205
+ return src(srcPath.html.src)
206
+
207
+ .pipe(
208
+
209
+ plumber({ errorHandler: notify.onError("Error: <%= error.message %>") })
210
+
211
+ )
212
+
213
+ .pipe(ejs({}, {}, { ext: ".html" })) //ejsを纏める
214
+
215
+ .pipe(rename({ extname: ".html" })) //拡張子をhtmlに
216
+
217
+ .pipe(
218
+
219
+ mode.production(
220
+
221
+ //本番環境のみ
222
+
223
+ htmlmin({
224
+
225
+ //htmlの圧縮
226
+
227
+ collapseWhitespace: true, // 余白を除去する
228
+
229
+ preserveLineBreaks: true, //改行を詰める
230
+
231
+ minifyJS: true, // jsの圧縮
232
+
233
+ removeComments: true // HTMLコメントを除去する
234
+
235
+ })
236
+
237
+ )
238
+
239
+ )
240
+
241
+ .pipe(replace(/[\s\S]*?(<!DOCTYPE)/, "$1"))
242
+
243
+ .pipe(dest(srcPath.html.dist))
244
+
245
+ .pipe(browserSync.reload({ stream: true }));
246
+
247
+ };
248
+
249
+
250
+
251
+ //Sassの処理自動化(開発用)
252
+
253
+ const stylesFunc = () => {
254
+
255
+ return src(srcPath.styles.src, { sourcemaps: true })
256
+
257
+ .pipe(
258
+
259
+ plumber({ errorHandler: notify.onError("Error: <%= error.message %>") })
260
+
261
+ )
262
+
263
+ // .pipe(glob())
264
+
265
+ .pipe(sass({ outputStyle: "expanded" }).on("error", sass.logError))
266
+
267
+ .pipe(
268
+
269
+ postcss([
270
+
271
+ autoprefixer({
272
+
273
+ // IEは11以上、Androidは4、ios safariは8以上
274
+
275
+ // その他は最新2バージョンで必要なベンダープレフィックスを付与する
276
+
277
+ //指定の内容はpackage.jsonに記入している
278
+
279
+ cascade: false,
280
+
281
+ grid: true
282
+
283
+ })
284
+
285
+ ])
286
+
287
+ )
288
+
289
+ .pipe(dest(srcPath.styles.dist, { sourcemaps: "./map" }))
290
+
291
+ .pipe(browserSync.reload({ stream: true }));
292
+
293
+ };
294
+
295
+
296
+
297
+ //Sassの処理自動化(本番用)
298
+
299
+ const stylesCompress = () => {
300
+
301
+ return src(srcPath.styles.src)
302
+
303
+ .pipe(
304
+
305
+ plumber({ errorHandler: notify.onError("Error: <%= error.message %>") })
306
+
307
+ )
308
+
309
+ .pipe(glob())
310
+
311
+ .pipe(sass({ outputStyle: "compressed" }).on("error", sass.logError))
312
+
313
+ .pipe(
314
+
315
+ postcss([
316
+
317
+ autoprefixer({
318
+
319
+ //上の指定と同じ
320
+
321
+ cascade: false,
322
+
323
+ grid: true
324
+
325
+ })
326
+
327
+ ])
328
+
329
+ )
330
+
83
- HTML,css(SCSS)
331
+ .pipe(cleanCSS())
332
+
333
+ .pipe(dest(srcPath.styles.dist))
334
+
335
+ .pipe(browserSync.reload({ stream: true }));
336
+
337
+ };
338
+
339
+
340
+
341
+ //scriptの処理自動化
342
+
343
+ const scriptFunc = () => {
344
+
345
+ return src(srcPath.scripts.src, { sourcemaps: true })
346
+
347
+ .pipe(order([srcPath.scripts.core, srcPath.scripts.app], { base: "./" }))
348
+
349
+ .pipe(
350
+
351
+ plumber({ errorHandler: notify.onError("Error: <%= error.message %>") })
352
+
353
+ )
354
+
355
+ .pipe(concat("init.js"))
356
+
357
+ .pipe(uglify({ output: { comments: /^!/ } }))
358
+
359
+ .pipe(
360
+
361
+ rename({
362
+
363
+ suffix: ".min"
364
+
365
+ })
366
+
367
+ )
368
+
369
+ .pipe(dest(srcPath.scripts.dist, { sourcemaps: "./map" }))
370
+
371
+ .pipe(browserSync.reload({ stream: true }));
372
+
373
+ };
374
+
375
+
376
+
377
+ //画像圧縮の定義
378
+
379
+ const imagesBase = [
380
+
381
+ pngquant({
382
+
383
+ quality: [0.7, 0.85]
384
+
385
+ }),
386
+
387
+ // mozjpeg({
388
+
389
+ // quality: 85
390
+
391
+ // }),
392
+
393
+ imagemin.gifsicle(),
394
+
395
+ imagemin.mozjpeg({
396
+
397
+ quality: 85,
398
+
399
+ progressive: true
400
+
401
+ }),
402
+
403
+ imagemin.optipng(),
404
+
405
+ imagemin.svgo({
406
+
407
+ removeViewBox: false
408
+
409
+ })
410
+
411
+ ];
412
+
413
+
414
+
415
+ //画像の処理自動化
416
+
417
+ const imagesFunc = () => {
418
+
419
+ return src(srcPath.images.src, { since: lastRun(imagesFunc) })
420
+
421
+ .pipe(plumber({ errorHandler: notify.onError("<%= error.message %>") }))
422
+
423
+ .pipe(imagemin(imagesBase))
424
+
425
+ .pipe(dest(srcPath.images.dist));
426
+
427
+ };
428
+
429
+
430
+
431
+ // マップファイル除去
432
+
433
+ const cleanMap = () => {
434
+
435
+ return del([srcPath.styles.map, srcPath.scripts.map]);
436
+
437
+ };
438
+
439
+
440
+
441
+ // ブラウザの読み込み処理
442
+
443
+ const browserSyncFunc = () => {
444
+
445
+ browserSync({
446
+
447
+ server: {
448
+
449
+ baseDir: "./dist/",
450
+
451
+ index: "index.html"
452
+
453
+ },
454
+
455
+ reloadOnRestart: true
456
+
457
+ });
458
+
459
+ };
460
+
461
+
462
+
463
+ // ファイルに変更があったら反映
464
+
465
+ const watchFiles = () => {
466
+
467
+ watch(srcPath.html.src, htmlFunc);
468
+
469
+ watch(srcPath.styles.src, stylesFunc);
470
+
471
+ watch(srcPath.scripts.src, scriptFunc);
472
+
473
+ watch(srcPath.images.src, imagesFunc);
474
+
475
+ };
476
+
477
+
478
+
479
+ exports.default = parallel(watchFiles, browserSyncFunc); //gulpの初期処理
480
+
481
+ exports.build = parallel(htmlFunc, stylesFunc, scriptFunc, imagesFunc);
482
+
483
+
484
+
485
+ exports.sasscompress = stylesCompress;
486
+
487
+ exports.cleanmap = cleanMap;
84
488
 
85
489
  ```
86
490