-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.js
166 lines (146 loc) · 4.8 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/**
Gulpfile for gulp-webpack-demo
created by fwon
*/
var gulp = require('gulp'),
os = require('os'),
gutil = require('gulp-util'),
sass = require('gulp-sass'),
concat = require('gulp-concat'),
gulpOpen = require('gulp-open'),
uglify = require('gulp-uglify'),
cssmin = require('gulp-cssmin'),
md5 = require('gulp-md5-plus'),
fileinclude = require('gulp-file-include'),
clean = require('gulp-clean'),
//cache = require('gulp-cache'),
spriter = require('gulp-css-spriter'),
rubysass = require('gulp-ruby-sass'),
base64 = require('gulp-css-base64'),
imagemin = require('gulp-imagemin'), // gulp-imagemin 和 imagemin-pngquant 很容易安装以后运行报错 最好执行npm安装
webpack = require('webpack'),
webpackConfig = require('./webpack.config.js'),
connect = require('gulp-connect');
var host = {
path: 'dist/',
port: 3000,
html: 'index.html'
};
//mac chrome: "Google chrome",
var browser = os.platform() === 'linux' ? 'Google chrome' : (
os.platform() === 'darwin' ? 'Google chrome' : (
os.platform() === 'win32' ? 'chrome' : 'firefox'));
var pkg = require('./package.json');
//将图片压缩拷贝到目标目录
gulp.task('copy:images', function (done) {
gulp.src(['src/images/**/*.{jpg,png,gif}'])
.pipe(
imagemin()
)
.pipe(gulp.dest('dist/images'))
.on('end', done);
});
//将字体拷贝到目标目录
gulp.task('copy:font', function (done) {
gulp.src(['src/fonts/**/*'])
.pipe(gulp.dest('dist/fonts'))
.on('end', done);
});
//压缩合并css, css中既有自己写的.sass, 也有引入第三方库的.css
/*gulp.task('sassmin', function (done) {
gulp.src(['src/sass/mui.scss','!src/sass/mui/*.scss'])
.pipe(sass())
//这里可以加css sprite 让每一个css合并为一个雪碧图
//.pipe(spriter({}))
.pipe(concat('mui.min.css'))
.pipe(gulp.dest('dist/css/'))
.on('end', done);
});*/
//需要搭建ruby环境
gulp.task('rubysassmin' , () =>
rubysass('src/sass/*.scss')
//.pipe(spriter({}))
.pipe(gulp.dest('dist/css/'))
)
//将js加上10位md5,并修改html中的引用路径,该动作依赖build-js
gulp.task('md5:js', ['build-js'], function (done) {
gulp.src('dist/js/*.js')
.pipe(md5(10, 'dist/*.html'))
.pipe(gulp.dest('dist/js'))
.on('end', done);
});
//将css加上10位md5,并修改html中的引用路径,该动作依赖sprite
gulp.task('md5:css', ['sprite'], function (done) {
gulp.src(['dist/css/*.css','!dist/css/mui.css'])
.pipe(md5(10, 'dist/*.html'))
.pipe(gulp.dest('dist/css'))
.on('end', done);
});
//用于在html文件中直接include文件
gulp.task('fileinclude', function (done) {
gulp.src(['src/*.html'])
.pipe(fileinclude({
prefix: '@@',
basepath: '@file'
}))
.pipe(gulp.dest('dist/'))
.on('end', done);
// .pipe(connect.reload())
});
//雪碧图操作,应该先拷贝图片并压缩合并css
gulp.task('sprite', ['copy:images', 'rubysassmin'], function (done) {
var timestamp = +new Date();
gulp.src(['dist/css/*.css','!dist/css/mui.css'])
.pipe(spriter({
spriteSheet: 'dist/images/spritesheet' + timestamp + '.png',
pathToSpriteSheetFromCSS: '../images/spritesheet' + timestamp + '.png',
spritesmithOptions: {
padding: 10
}
}))
.pipe(base64())
.pipe(cssmin())
.pipe(gulp.dest('dist/css'))
.on('end', done);
});
gulp.task('clean', function (done) {
gulp.src(['dist'])
.pipe(clean())
.on('end', done);
});
gulp.task('watch', function (done) {
gulp.watch('src/**/*', ['rubysassmin', 'build-js', 'fileinclude'])
.on('end', done);
});
gulp.task('connect', function () {
console.log('connect------------');
connect.server({
root: host.path,
port: host.port,
livereload: true
});
});
gulp.task('open', function (done) {
gulp.src('')
.pipe(gulpOpen({
app: browser,
uri: 'http://localhost:3000/'
}))
.on('end', done);
});
var myDevConfig = Object.create(webpackConfig);
var devCompiler = webpack(myDevConfig);
//引用webpack对js进行操作
gulp.task("build-js", ['fileinclude'], function(callback) {
devCompiler.run(function(err, stats) {
if(err) throw new gutil.PluginError("webpack:build-js", err);
gutil.log("[webpack:build-js]", stats.toString({
colors: true
}));
callback();
});
});
//发布
gulp.task('default', ['connect', 'fileinclude', 'md5:css', 'md5:js', 'open','copy:font']);
//开发
gulp.task('dev', ['connect', 'copy:images', 'fileinclude', 'rubysassmin','build-js', 'watch', 'open','copy:font']);