/
gulpfile.js
145 lines (130 loc) · 3.72 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
136
137
138
139
140
141
142
143
144
var gulp = require('gulp'),
gulpIf = require('gulp-if'),
browserify = require('browserify'),
watchify = require('watchify'),
babelify = require('babelify'),
source = require('vinyl-source-stream'),
buffer = require('vinyl-buffer'),
eslint = require('gulp-eslint'),
plumber = require('gulp-plumber'),
watch = require('gulp-watch'),
sass = require('gulp-sass'),
postcss = require('gulp-postcss'),
del = require('del'),
runSequence = require('run-sequence'),
connect = require('electron-connect').server.create(),
packager = require('electron-packager');
gulp.task('clean', function (done) {
del(['./dist/css', './dist/js']).then(function () {
done();
});
});
gulp.task('style', function () {
return gulp
.src('./src/scss/**/*.scss')
.pipe(plumber())
.pipe(sass())
.pipe(postcss([
require('stylelint')(),
require('postcss-calc')(),
require('rucksack-css')(),
require('cssnano')(),
require('postcss-reporter')()
]))
.pipe(gulp.dest('./dist/css'));
});
gulp.task('script', function () {
var bundler = browserify('src/js/app.jsx', {
debug: true
}).transform(babelify, {
"presets": ["es2015", "react"],
"plugins": ["transform-object-assign"]
});
function rebundle () {
bundler
.bundle()
.on('error', function (err) {
console.error(err); this.emit('end');
})
.pipe(source('app.js'))
.pipe(buffer())
.pipe(gulp.dest('./dist/js'));
}
bundler.on('update', function () {
console.log('-> bundling...');
rebundle();
});
rebundle();
})
gulp.task('lint', function () {
return gulp
.src('./src/js/**/*.{js,jsx}')
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failAfterError());
});
gulp.task('serve', function () {
runSequence('clean', ['lint', 'script', 'style'], connect.start);
gulp.watch('./main.js', connect.restart);
gulp.watch(['./src/scss/**/*.scss'], ['style']);
gulp.watch(['./src/js/**/*.{js,jsx}'], ['script']);
gulp.watch(['./dist/index.html'], connect.reload);
gulp.watch(['./dist/**/*.js'], connect.reload);
gulp.watch(['./dist/**/*.css'], connect.reload);
});
gulp.task('build', function () {
runSequence('clean', ['lint', 'script', 'style']);
});
gulp.task('package', ['build'], function (done) {
packager({
dir: './',
out: './',
name: 'Tubehead',
arch: 'x64',
platform: 'darwin',
version: '0.36.0',
icon: './icons/tubehead.icns',
overwrite: true,
asar: true,
prune: true,
'app-version': require('./package.json').version,
ignore: [
'src',
'node_modules/babel-eslint',
'node_modules/babel-plugin-transform-object-assign',
'node_modules/babel-preset-es2015',
'node_modules/babel-preset-react',
'node_modules/babelify',
'node_modules/cssnano',
'node_modules/del',
'node_modules/electron-debug',
'node_modules/electron-connect',
'node_modules/electron-prebuilt',
'node_modules/eslint-config-makotot',
'node_modules/eslint-plugin-react',
'node_modules/gulp',
'node_modules/gulp-babel',
'node_modules/gulp-eslint',
'node_modules/gulp-if',
'node_modules/gulp-plumber',
'node_modules/gulp-postcss',
'node_modules/gulp-sass',
'node_modules/gulp-watch',
'node_modules/postcss-calc',
'node_modules/postcss-reporter',
'node_modules/rucksack-css',
'node_modules/run-sequence',
'node_modules/stylelint',
'node_modules/stylelint-config-makotot',
'node_modules/vinyl-buffer',
'node_modules/vinyl-source-stream',
'node_modules/watchify'
]
}, function (err, path) {
if (err) {
console.error(err);
}
console.log(path);
done();
});
});