-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
131 lines (119 loc) · 3.86 KB
/
gulpfile.js
File metadata and controls
131 lines (119 loc) · 3.86 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
let preprocessor = 'sass', // Preprocessor (sass, less, styl); 'sass' also work with the Scss syntax in blocks/ folder.
fileswatch = 'html,htm,txt,json,md,woff2' // List of files extensions for watching & hard reload
const { src, dest, parallel, series, watch } = require('gulp')
const browserSync = require('browser-sync').create()
const bssi = require('browsersync-ssi')
const ssi = require('ssi')
const webpack = require('webpack-stream')
const sass = require('gulp-sass')
const sassglob = require('gulp-sass-glob')
const less = require('gulp-less')
const lessglob = require('gulp-less-glob')
const styl = require('gulp-stylus')
const stylglob = require("gulp-noop")
const cleancss = require('gulp-clean-css')
const autoprefixer = require('gulp-autoprefixer')
const rename = require('gulp-rename')
const imagemin = require('gulp-imagemin')
const newer = require('gulp-newer')
const rsync = require('gulp-rsync')
const del = require('del')
function browsersync() {
browserSync.init({
server: {
baseDir: 'app/',
middleware: bssi({ baseDir: 'app/', ext: '.html' })
},
ghostMode: { clicks: false },
notify: false,
online: true,
// tunnel: 'yousutename', // Attempt to use the URL https://yousutename.loca.lt
})
}
function scripts() {
return src(['app/js/*.js', '!app/js/*.min.js'])
.pipe(webpack({
mode: 'production',
performance: { hints: false },
module: {
rules: [
{
test: /\.(js)$/,
exclude: /(node_modules)/,
loader: 'babel-loader',
query: {
presets: ['@babel/env'],
plugins: ['babel-plugin-root-import']
}
}
]
}
})).on('error', function handleError() {
this.emit('end')
})
.pipe(rename('app.min.js'))
.pipe(dest('app/js'))
.pipe(browserSync.stream())
}
function styles() {
return src([`app/styles/${preprocessor}/*.*`, `!app/styles/${preprocessor}/_*.*`])
.pipe(eval(`${preprocessor}glob`)())
.pipe(eval(preprocessor)())
.pipe(autoprefixer({ overrideBrowserslist: ['last 10 versions'], grid: true }))
.pipe(cleancss({ level: { 1: { specialComments: 0 } },/* format: 'beautify' */ }))
.pipe(rename({ suffix: ".min" }))
.pipe(dest('app/css'))
.pipe(browserSync.stream())
}
function images() {
return src(['app/images/src/**/*'])
.pipe(newer('app/images/dist'))
.pipe(imagemin())
.pipe(dest('app/images/dist'))
.pipe(browserSync.stream())
}
function buildcopy() {
return src([
'{app/js,app/css}/*.min.*',
'app/images/**/*.*',
'!app/images/src/**/*',
'app/fonts/**/*'
], { base: 'app/' })
.pipe(dest('dist'))
}
async function buildhtml() {
let includes = new ssi('app/', 'dist/', '/**/*.html')
includes.compile()
del('dist/parts', { force: true })
}
function cleandist() {
return del('dist/**/*', { force: true })
}
function deploy() {
return src('dist/')
.pipe(rsync({
root: 'dist/',
hostname: 'username@yousite.com',
destination: 'yousite/public_html/',
// clean: true, // Mirror copy with file deletion
include: [/* '*.htaccess' */], // Included files to deploy,
exclude: [ '**/Thumbs.db', '**/*.DS_Store' ],
recursive: true,
archive: true,
silent: false,
compress: true
}))
}
function startwatch() {
watch(`app/styles/${preprocessor}/**/*`, { usePolling: true }, styles)
watch(['app/js/**/*.js', '!app/js/**/*.min.js'], { usePolling: true }, scripts)
watch('app/images/src/**/*.{jpg,jpeg,png,webp,svg,gif}', { usePolling: true }, images)
watch(`app/**/*.{${fileswatch}}`, { usePolling: true }).on('change', browserSync.reload)
}
exports.scripts = scripts
exports.styles = styles
exports.images = images
exports.deploy = deploy
exports.assets = series(scripts, styles, images)
exports.build = series(cleandist, scripts, styles, images, buildcopy, buildhtml)
exports.default = series(scripts, styles, images, parallel(browsersync, startwatch))