-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.js
135 lines (115 loc) · 3.01 KB
/
gulpfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* eslint-disable */
// Common Stuff
const { src, dest, watch, series, parallel } = require( 'gulp' );
// Script Stuff
const eslint = require( 'gulp-eslint' );
const terser = require( 'gulp-terser' );
const sourcemaps = require( 'gulp-sourcemaps' );
const rollup = require( 'gulp-better-rollup' );
const resolve = require( '@rollup/plugin-node-resolve' );
const commonjs = require( '@rollup/plugin-commonjs' );
const typescript = require( '@rollup/plugin-typescript' );
const babel = require( 'rollup-plugin-babel' );
// Style Stuff
const sass = require( 'gulp-sass' );
const autoprefixer = require( 'gulp-autoprefixer' );
// Browser Sync
const sync = require( 'browser-sync' ).create();
// Options
const eslintOptions = require( './.eslintrc.json' );
const babelOptions = require( './.babelrc.json' );
const watchOptions = {
events: [ 'add', 'change' ],
usePolling: true,
};
// =========================
// ! Utilities
// =========================
function swallow( err ) {
console.log( err.toString() );
this.emit( 'end' );
}
// =========================
// ! Tasks
// =========================
function validateScripts() {
return src( './assets/js/**/*.js' )
.pipe( eslint( eslintOptions ) )
.pipe( eslint.format() )
.pipe( eslint.failAfterError() );
}
function compileScripts() {
return src( './assets/js/app.js' )
.pipe( sourcemaps.init() )
.pipe( rollup( {
plugins: [
resolve(),
commonjs( { include: 'node_modules/**' } ),
babel( {
...babelOptions,
exclude: 'node_modules/**',
} ),
],
}, {
file: 'bundle.js',
format: 'iife',
} ) )
.pipe( terser( {
mangle: {
module: true,
},
compress: {
arguments: true,
},
output: {
ecma: 5,
comments: false,
},
} ) )
.pipe( sourcemaps.write( './' ) )
.on( 'error', swallow )
.pipe( dest( './' ) );
}
function compileStyles() {
return src( './assets/scss/*.scss' )
.pipe( sourcemaps.init() )
.pipe( sass( { outputStyle: 'compressed' } ) )
.on( 'error', sass.logError )
.pipe( autoprefixer() )
.pipe( sourcemaps.write( './' ) )
.pipe( dest( './' ) );
}
// =========================
// ! Server Handling
// =========================
function startSync() {
if ( sync.active ) {
sync.reload();
} else {
sync.init( {
server: {
baseDir: './',
},
port: 5759,
} );
}
}
// =========================
// ! Watchers
// =========================
function watchScripts() {
return watch( './assets/js/**/*.js', watchOptions, series( validateScripts, compileScripts ) );
}
function watchStyles() {
return watch( './assets/scss/**/*.scss', watchOptions, function refreshStyles() {
return compileStyles().pipe( sync.stream() );
} );
}
// =========================
// ! Exported Commands
// =========================
exports.lint = validateScripts;
exports.js = series( validateScripts, compileScripts );
exports.css = compileStyles;
exports.build = exports.default = parallel( series( validateScripts, compileScripts ), compileStyles );
exports.watch = parallel( startSync, watchScripts, watchStyles );