11import gulp from "gulp" ;
2- import imagemin , { gifsicle , svgo } from "gulp-imagemin" ;
2+ import imagemin , { gifsicle , svgo } from "gulp-imagemin" ;
33import sharpResponsive from "gulp-sharp-responsive" ;
44import uswds from "@uswds/compile" ;
5+ import rev from "gulp-rev" ;
6+ import revDelete from "gulp-rev-delete-original" ;
7+
58
69/**
710 * USWDS version
811 */
912
1013uswds . settings . version = 3 ;
1114
15+
1216/**
1317 * Configure USWDS source paths
1418 */
1519uswds . paths . src . projectSass = "./sass/custom" ;
20+
1621// uswds.paths.src.theme = "./sass/theme";
1722
23+
1824/**
1925 * Configure USWDS destination paths
2026 */
@@ -24,6 +30,22 @@ uswds.paths.dist.js = "./assets/js";
2430uswds . paths . dist . fonts = "./assets/fonts" ;
2531uswds . paths . dist . img = "./assets/img" ;
2632
33+
34+ /**
35+ * CSS compilation with cache busting
36+ */
37+
38+
39+ function addHashToCSS ( ) {
40+ return gulp
41+ . src ( "./assets/css/{styles,events,civichackdc}.css" ) // Process multiple CSS files
42+ . pipe ( rev ( ) ) // Add hash to filename
43+ . pipe ( gulp . dest ( "./assets/css" ) )
44+ . pipe ( rev . manifest ( 'css-manifest.json' ) ) // Create manifest
45+ . pipe ( gulp . dest ( './_data' ) ) ; // Save manifest to Jekyll data folder
46+ }
47+
48+
2749/**
2850 * Image processing tasks
2951 */
@@ -32,68 +54,80 @@ const imageDest = "./assets/images";
3254
3355// Resizes and optimizes raster images
3456function resizeImages ( ) {
35- return gulp
36- . src ( "_images/**/*.{jpg,jpeg,png}" , { encoding : false } )
37- . pipe (
38- sharpResponsive ( {
39- formats : [
40- // For each original format, create different sizes
41- {
42- width : 400 ,
43- rename : { suffix : "-400w" } ,
44- jpegOptions : { quality : 75 , progressive : true } ,
45- withoutEnlargement : true ,
46- } ,
47- {
48- width : 800 ,
49- rename : { suffix : "-800w" } ,
50- jpegOptions : { quality : 75 , progressive : true } ,
51- withoutEnlargement : true ,
52- } ,
53- {
54- width : 1200 ,
55- rename : { suffix : "-1200w" } ,
56- jpegOptions : { quality : 80 , progressive : true } ,
57- withoutEnlargement : true ,
58- } ,
59- {
60- width : 1800 ,
61- rename : { suffix : "-1800w" } ,
62- jpegOptions : { quality : 90 , progressive : true } ,
63- withoutEnlargement : true ,
64- } ,
65- ] ,
66- } )
67- )
68- . pipe ( gulp . dest ( imageDest ) ) ;
57+ return gulp . src ( "_images/**/*.{jpg,jpeg,png}" , { encoding : false } ) . pipe ( sharpResponsive ( {
58+ formats : [
59+
60+ // For each original format, create different sizes
61+ {
62+ width : 400 ,
63+ rename : {
64+ suffix : "-400w"
65+ } ,
66+ jpegOptions : {
67+ quality : 75 ,
68+ progressive : true
69+ } ,
70+ withoutEnlargement : true
71+ } , {
72+ width : 800 ,
73+ rename : {
74+ suffix : "-800w"
75+ } ,
76+ jpegOptions : {
77+ quality : 75 ,
78+ progressive : true
79+ } ,
80+ withoutEnlargement : true
81+ } , {
82+ width : 1200 ,
83+ rename : {
84+ suffix : "-1200w"
85+ } ,
86+ jpegOptions : {
87+ quality : 80 ,
88+ progressive : true
89+ } ,
90+ withoutEnlargement : true
91+ } , {
92+ width : 1800 ,
93+ rename : {
94+ suffix : "-1800w"
95+ } ,
96+ jpegOptions : {
97+ quality : 90 ,
98+ progressive : true
99+ } ,
100+ withoutEnlargement : true
101+ }
102+ ]
103+ } ) ) . pipe ( gulp . dest ( imageDest ) ) ;
69104}
70105
71106// Optimizes vector images and GIFs
72107function optimizeSvgsAndGifs ( ) {
73- return gulp
74- . src ( "_images/**/*.{svg,gif}" , { encoding : false } )
75- . pipe (
76- imagemin (
77- [
78- gifsicle ( { interlaced : true } ) ,
79- svgo ( {
80- plugins : [
81- { name : "removeViewBox" , active : false } ,
82- { name : "cleanupIDs" , active : false } ,
83- ] ,
84- } ) ,
85- ] ,
86- { verbose : true }
87- )
108+ return gulp . src ( "_images/**/*.{svg,gif}" , { encoding : false } ) . pipe ( imagemin ( [
109+ gifsicle (
110+ { interlaced : true }
111+ ) ,
112+ svgo (
113+ {
114+ plugins : [
115+ {
116+ name : "removeViewBox" ,
117+ active : false
118+ } , {
119+ name : "cleanupIDs" ,
120+ active : false
121+ }
122+ ]
123+ }
88124 )
89- . pipe ( gulp . dest ( imageDest ) ) ;
125+ ] , { verbose : true } ) ) . pipe ( gulp . dest ( imageDest ) ) ;
90126}
91127
92128// Copies WebP files without processing
93129function copyWebpFiles ( ) {
94- return gulp
95- . src ( "_images/**/*.webp" , { encoding : false } )
96- . pipe ( gulp . dest ( imageDest ) ) ;
130+ return gulp . src ( "_images/**/*.webp" , { encoding : false } ) . pipe ( gulp . dest ( imageDest ) ) ;
97131}
98132
99133const processImages = gulp . parallel ( resizeImages , optimizeSvgsAndGifs , copyWebpFiles ) ;
@@ -102,11 +136,12 @@ function watchImages() {
102136 return gulp . watch ( imageSource , processImages ) ;
103137}
104138
139+
105140/**
106141 * Functions exported as gulp tasks
107142 */
108143
109- export const compile = gulp . series ( processImages , uswds . compile ) ;
144+ export const compile = gulp . series ( processImages , uswds . compile , addHashToCSS ) ;
110145const watchUsdws = ( done ) => uswds . watch ( done ) ;
111146
112147export const watch = gulp . parallel ( watchUsdws , watchImages ) ;
0 commit comments