-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
139 lines (121 loc) · 4.7 KB
/
gulpfile.js
File metadata and controls
139 lines (121 loc) · 4.7 KB
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
136
137
138
139
"use strict";
// Load Plugins
const autoprefixer = require('gulp-autoprefixer');
const beautify = require('gulp-beautify');
const browserSync = require("browser-sync").create();
const del = require('del');
const gulp = require('gulp');
const mergeStream = require('merge-stream');
const nunjucks = require('gulp-nunjucks');
const sass = require('gulp-sass')(require('sass')); // ✅ Updated for Dart Sass
const inject = require('gulp-inject-string');
const os = require('os');
const pkg = require('./package.json');
const dependencies = require('./dependencies.json');
/**
* Set the destination/production directory
* This is where the project is compiled and exported for production.
* This folder is auto created and managed by gulp.
* Do not add/edit/save any files or folders inside this folder. They will be deleted by the gulp tasks.
*/
const distDir = './dist/';
// Template credits
const credits = [
'* Template Name: ' + pkg.title + ' - v' + pkg.version,
'* Template URL: ' + pkg.homepage,
'* Author: ' + pkg.author,
'* License: ' + pkg.license
];
// Clean up the dist folder before running any task
function clean() {
return del(distDir + '**/*');
}
// Task: Copy Files
function copyFiles() {
const assetsFolder = gulp.src(['./src/assets/**/*', '!./src/assets/js/main.js'])
.pipe(gulp.dest(distDir + 'assets/'))
.pipe(browserSync.stream());
const formsFolder = gulp.src('./src/forms/**/*')
.pipe(gulp.dest(distDir + 'forms/'));
return mergeStream(assetsFolder, formsFolder);
}
// Task: Compile HTML
function compileHTML() {
var css_links = '';
var js_links = '';
for (let dependency in dependencies) {
if (dependencies[dependency].css_link !== undefined) {
css_links += '<link href="' + dependencies[dependency].css_link + '" rel="stylesheet">';
}
if (dependencies[dependency].js_link !== undefined) {
js_links += '<script src="' + dependencies[dependency].js_link + '"></script>';
}
}
return gulp.src(['./src/*.html', '!./src/template.html'])
.pipe(nunjucks.compile())
.pipe(inject.replace('<!-- Vendor CSS Files -->', '<!-- Vendor CSS Files -->' + css_links))
.pipe(inject.replace('<!-- Vendor JS Files -->', '<!-- Vendor JS Files -->' + js_links))
.pipe(beautify.html({ indent_size: 2, max_preserve_newlines: 1 }))
.pipe(inject.replace('</head>', ' <!-- =======================================================\r\n ' + credits.join("\r\n ") + '\r\n ======================================================== -->\r\n</head>'))
.pipe(gulp.dest(distDir))
.pipe(browserSync.stream());
}
// Task: Compile SCSS
function compileSCSS() {
return gulp.src('./src/scss/**/*.scss')
.pipe(sass({
outputStyle: 'expanded',
}))
.on("error", sass.logError)
.pipe(autoprefixer({
cascade: false
}))
.pipe(inject.prepend('/**' + os.EOL + credits.join(os.EOL) + os.EOL + '*/' + os.EOL + os.EOL))
.pipe(gulp.dest(distDir + 'assets/css'))
.pipe(browserSync.stream());
}
// Task: Compile JS
function compileJS() {
return gulp.src('./src/assets/js/main.js')
.pipe(beautify.js({ indent_size: 2, max_preserve_newlines: 2 }))
.pipe(inject.prepend('/**' + os.EOL + credits.join(os.EOL) + os.EOL + '*/' + os.EOL))
.pipe(gulp.dest(distDir + 'assets/js'))
.pipe(browserSync.stream());
}
// Task: Copy Dependencies
function copyDependencies() {
var stream = mergeStream();
for (let dependency in dependencies) {
if (dependencies[dependency].src) {
stream.add(gulp.src(dependencies[dependency].src).pipe(gulp.dest(distDir + dependencies[dependency].dest)));
} else if (dependencies[dependency].srcs) {
for (let multidependency in dependencies[dependency].srcs) {
stream.add(gulp.src(dependencies[dependency].srcs[multidependency].src).pipe(gulp.dest(distDir + dependencies[dependency].srcs[multidependency].dest)));
}
}
}
return stream;
}
// Init live server browser sync
function initBrowserSync(done) {
browserSync.init({
server: {
baseDir: distDir
},
port: 3000,
notify: false
});
done();
}
// Watch files
function watchFiles() {
gulp.watch('./src/scss/**/*', compileSCSS);
gulp.watch('./src/**/*.html', compileHTML);
gulp.watch(['./src/assets/**/*', '!./src/assets/js/main.js'], copyFiles);
gulp.watch('./src/assets/js/main.js', compileJS);
}
// Export tasks
const dist = gulp.series(clean, gulp.parallel(copyFiles, compileHTML, compileSCSS, compileJS, copyDependencies));
exports.watch = gulp.series(dist, watchFiles);
exports.start = gulp.series(dist, gulp.parallel(watchFiles, initBrowserSync));
exports.default = dist;