-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.js
126 lines (109 loc) · 3.2 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
const path = require('path');
const fs = require('fs');
const join = path.join;
const del = require('del');
const gulp = require('gulp');
const glob = require('glob');
const concat = require('gulp-concat');
const babel = require('gulp-babel');
const runSequence = require('run-sequence');
const webpack = require('webpack-stream');
const browserSync = require('browser-sync').create();
const postCSS = require('gulp-postcss');
const less = require('gulp-less');
const plumber = require('gulp-plumber');
const manifest = require('gulp-appcache');
const notify = require('gulp-notify');
const autoPrefixer = require('autoprefixer');
const minify = require('cssnano');
const DEMO = 'demo';
const ICONS = 'node_modules/alfa-ui-primitives/icons';
const OUT = join(DEMO, 'out');
gulp.task('icons', () => gulp
.src(join(ICONS, '**/*.svg'))
.pipe(gulp.dest(ICONS))
.pipe(gulp.dest(join(OUT, 'icons'))));
gulp.task('clean', () => del(join(OUT)));
gulp.task('templates', () => gulp.src(join(DEMO, 'src/demo.html')).pipe(gulp.dest(join(OUT))));
gulp.task('images', () => gulp.src(join(DEMO, 'src/*.svg')).pipe(gulp.dest(join(OUT))));
gulp.task('scripts', () => gulp
.src(join(DEMO, 'src/*.js'))
.pipe(babel({
presets: ['es2015'],
}))
.pipe(webpack(require('./webpack.config.js')))
.pipe(gulp.dest(join(OUT))));
gulp.task('styles', () => {
const processors = [autoPrefixer({ browsers: ['last 2 versions'] }), minify()];
return gulp
.src(join(DEMO, 'src/main.less'))
.pipe(plumber({
errorHandler: notify.onError(err => ({
title: 'LESS',
message: err.message,
})),
}))
.pipe(less())
.pipe(postCSS(processors))
.pipe(concat('styles.css'))
.pipe(gulp.dest(join(OUT)));
});
gulp.task('generateJSON', () => {
const obj = {};
obj.icons = [];
const getAllIcons = (callback) => {
glob(join(ICONS, '**/*.svg'), (err, files) => {
let counter = 0;
files
.forEach((file, index, array) => {
counter += 1;
if (/svg/.test(file) !== false && !/_xs_|art_/.test(file)) {
const icon = {};
icon.name = path.basename(file);
icon.category = path.basename(path.dirname(file));
obj.icons.push(icon);
if (counter === array.length) callback();
}
});
});
};
getAllIcons(() => {
const finalJSON = JSON.stringify(obj);
fs.writeFile('demo/out/icons.json', finalJSON, err => (err ? console.log(err) : null));
});
});
gulp.task('styles:sync', ['styles'], (done) => {
browserSync.reload();
done();
});
gulp.task('templates:sync', ['templates'], (done) => {
browserSync.reload();
done();
});
gulp.task('scripts:sync', ['scripts'], (done) => {
browserSync.reload();
done();
});
gulp.task('run-server', () => {
browserSync.init({
server: {
baseDir: '.',
},
startPath: './demo/out/demo.html',
});
gulp.watch(join(DEMO, '/src/*.html'), ['templates:sync']);
gulp.watch(join(DEMO, '/src/*.js'), ['scripts:sync']);
gulp.watch(join(DEMO, '/src/*.less'), ['styles:sync']);
});
gulp.task('default', () => {
runSequence(
'clean',
'icons',
'templates',
'generateJSON',
'scripts',
'styles',
'images',
'run-server',
);
});