forked from nrandecker/particle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gulpfile.mjs
135 lines (122 loc) · 3.83 KB
/
gulpfile.mjs
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
import gulp from 'gulp';
import csso from 'gulp-csso';
import uglify from 'gulp-uglify';
import concat from 'gulp-concat';
import plumber from 'gulp-plumber';
import cp from 'child_process';
import jsonmin from 'gulp-jsonmin';
import imagemin from 'gulp-imagemin';
import browserSync from 'browser-sync';
import replace from 'gulp-string-replace';
import rename from 'gulp-rename';
import dartSass from 'sass';
import gulpSass from 'gulp-sass';
const sass = gulpSass(dartSass);
var jekyllCommand = (/^win/.test(process.platform)) ? 'jekyll.bat' : 'jekyll';
/*
* Build the Jekyll Site
* runs a child process in node that runs the jekyll commands
*/
gulp.task('jekyll-build', function (done) {
return cp.spawn(jekyllCommand, ['build'], { stdio: 'inherit' })
.on('close', done);
});
/*
* Rebuild Jekyll & reload browserSync
*/
gulp.task('jekyll-rebuild', gulp.series(['jekyll-build'], function (done) {
browserSync.reload();
done();
}));
/*
* Build the jekyll site and launch browser-sync
*/
gulp.task('browser-sync', gulp.series(['jekyll-build'], function (done) {
browserSync({
server: {
baseDir: '_site'
}
});
done()
}));
/*
* Compile and minify sass
*/
gulp.task('sass', function () {
return gulp.src('src/styles/**/*.{scss,css}')
.pipe(plumber())
.pipe(sass())
.pipe(csso())
.pipe(gulp.dest('assets/css/'))
});
/*
* Compile fonts
*/
gulp.task('fonts', function () {
return gulp.src('src/fonts/**/*.{ttf,woff,woff2,svg,eot}')
.pipe(plumber())
.pipe(rename(function(path) {
console.log(path)
path.dirname = '';
}))
.pipe(gulp.dest('assets/fonts/'))
});
/*
* Minify jsons
*/
gulp.task('jsonmin', function () {
return gulp.src('src/json/**/*.json')
.pipe(jsonmin())
.pipe(gulp.dest('assets/json/'))
});
/*
* Minify images
*/
gulp.task('imagemin', function () {
return gulp.src('src/img/**/*.{jpg,png,gif}')
.pipe(plumber())
.pipe(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true }))
.pipe(gulp.dest('assets/img/'))
});
/**
* Compile and minify js
*/
gulp.task('js', function () {
return gulp.src('src/js/**/*.js')
.pipe(plumber())
.pipe(concat('main.js'))
.pipe(uglify())
.pipe(gulp.dest('assets/js/'))
});
/**
* Copy node-module sources to src
*/
function copyFiles(source, destination) {
return gulp.src(source)
.pipe(gulp.dest(destination));
};
gulp.task('node-src', async function () {
await Promise.all([
gulp.src('node_modules/@fortawesome/fontawesome-free/scss/*.scss')
.pipe(replace('../webfonts', '../fonts'))
.pipe(gulp.dest('src/styles/fontawesome/')),
copyFiles('node_modules/@fortawesome/fontawesome-free/js/{fontawesome.js,regular.js,solid.js,brands.js,v4-shims.js,conflict-detection.js}', 'src/js/fontawesome/'),
copyFiles('node_modules/@fortawesome/fontawesome-free/webfonts/*.{ttf,woff2}', 'src/fonts/fontawesome/'),
copyFiles('node_modules/normalize.css/*.css', 'src/styles/normalize.css/'),
copyFiles('node_modules/devicon/fonts/*', 'src/fonts/devicon/'),
gulp.src('node_modules/devicon/devicon.min.css')
.pipe(replace('fonts/devicon', '../fonts/devicon'))
.pipe(gulp.dest('src/styles/devicon/')),
copyFiles('node_modules/particles.js/particles.js', 'src/js/particle.js/'),
copyFiles('node_modules/sweet-scroll/sweet-scroll.min.js', 'src/js/sweet-scroll/')
])
});
gulp.task('watch', function () {
gulp.watch('src/styles/**/*.{scss,css}', gulp.series(['sass', 'jekyll-rebuild']));
gulp.watch('src/json/**/*.json', gulp.series(['jsonmin']));
gulp.watch('src/js/**/*.js', gulp.series(['js', 'jekyll-rebuild']));
gulp.watch('src/fonts/**/*.{tff,woff,woff2}', gulp.series(['fonts']));
gulp.watch('src/img/**/*.{jpg,png,gif}', gulp.series(['imagemin']));
gulp.watch(['*html', '_includes/*html', '_layouts/*.html'], gulp.series(['jekyll-rebuild']));
});
gulp.task('default', gulp.series(['node-src', 'jsonmin', 'js', 'sass', 'fonts', 'browser-sync', 'watch']));