-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgulpfile.js
242 lines (215 loc) · 7.34 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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
'use strict';
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
var reload = browserSync.reload;
var less = require('gulp-less');
var path = require('path');
var clean = require('gulp-clean');
var nano = require('gulp-cssnano');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');
var watch = require('gulp-watch');
var exec = require('child_process').exec;
//var ngmin = require('gulp-ngmin');
var ngAnnotate = require('gulp-ng-annotate');
var minifyCss = require('gulp-minify-css');
var gulpif = require('gulp-if');
var argv = require('yargs').argv;
var chalk = require('chalk');
//压缩css插件
var LessPluginCleanCSS = require('less-plugin-clean-css'),
cleancss = new LessPluginCleanCSS({
advanced: true
});
var merge = require('merge-stream');
var fs = require('fs');
var gulpif = require('gulp-if');
//http://www.ituring.com.cn/article/54547
var Q = require('q');
var karmaServer = require('karma').Server;
var _red = function(title, info) {
console.log(chalk.white.bgRed.bold(' ' + title + ' '), info);
};
var syncModule = require('./syncModule');
//////////配置目录名称
//普通js脚本开发目录,一般放在gulpDevEnv目录下: gulpDevEnv/dev
var sourceDirName = 'dev';
//普通js脚本同步目录,一般放在gulpDevEnv目录外: ../dist/dev (dev和dist也可以同名)
var targetDirName = 'dist'; //'dist';
// check if targetDir is inside of gulpDevEnv or not
var targetDirIsInside = true;
var prefixOfTargetDir = (targetDirIsInside) ? '' : '../';
//////////配置目录名称
//sourceDirName和targetDirName只能包含0-9a-z_
sourceDirName = sourceDirName.replace(/[\r\n]/ig, "");
targetDirName = targetDirName.replace(/[\r\n]/ig, "");
if (sourceDirName === "") {
console.log(chalk.white.bgRed.bold('[error]') + ' 缺少 sourceDirName');
process.exit()
}
if (targetDirName === "") {
console.log(chalk.white.bgRed.bold('[error]') + ' 缺少 targetDirName');
process.exit()
}
//deploy前请gulp karma进行测试
gulp.task('karma', function(done) {
new karmaServer({
configFile: __dirname + '/karma.test.conf.js',
singleRun: true
}, done).start();
});
//less生成压缩版css
gulp.task('lessmin', function() {
return gulp.src('./' + sourceDirName + '/**/*.less')
.pipe(less({
paths: [path.join(__dirname, sourceDirName)],
plugins: [cleancss]
}))
.pipe(gulp.dest(sourceDirName))
.pipe(browserSync.stream({
match: "**/*.css"
}));
});
//生成css,不压缩
gulp.task('less', function() {
return gulp.src('./' + sourceDirName + '/**/*.less')
.pipe(less({
paths: [path.join(__dirname, sourceDirName)]
}))
.pipe(gulp.dest(sourceDirName))
.pipe(browserSync.stream({
match: "**/*.css"
}));
});
gulp.task('cleanCssFiles', function() {
return gulp.src(['./' + sourceDirName + '/**/*.css'], {
read: false
})
.pipe(clean());
});
var chgdFiles = {};
var chgdCss = {};
var chgdLess = {};
//watch:Django时是否压缩css/js
var isCompress = true;
//Django文件监控(压缩)
//gulp watch:Django --src=yes/no
gulp.task('watch:Django', function() {
if (typeof argv.src == 'string' && argv.src.match(/^(yes|no)$/i)) isCompress = (RegExp.$1.match(/^yes$/i)) ? false : true;
if (isCompress) {
console.log(chalk.white.bgGreen.bold('[压缩模式]'));
} else {
console.log(chalk.white.bgMagenta.bold('[非压缩模式]'));
}
console.log(chalk.white.bgBlue.bold('[请注意]:') + chalk.black.bgWhite.bold(' push/pull代码时请暂停watch:Django文件监控[Ctrl + c]'));
browserSync.init({
server: {
baseDir: "./" + sourceDirName + "/",
directory: true
},
//不弹窗
open: false,
//notify: false
//startPath: "/index.html"
//scrollProportionally: false // Sync viewports to TOP position
//scrollThrottle: 100 // only send scroll events every 100 milliseconds
//https://www.browsersync.io/docs/options/
port: 4032
});
//Default: ['add', 'change', 'unlink']
var _cbChgHtml = function(chg) {
console.log('watch html', chg);
gulp.start('dev', function(done) {
browserSync.reload();
});
};
gulp.watch(sourceDirName + "/**/*.html", {cwd: "./"}).on("change", _cbChgHtml);
//如果文件有修改,编译less到目录
gulp.watch(sourceDirName + "/**/*.less", {cwd: "./"}).on("change", function(chg) {
console.log('watch', chg);
gulp.start('dev', function(done) {
browserSync.reload();
});
});
//如果文件有修改,编译less到public目录(同一个目录less=>css)
gulp.watch(sourceDirName + "/**/*.less", {cwd: "./"}).on("change", function(chg) {
console.log('watch less', chg);
if (chg.type.match(/^(added|changed|deleted)$/i)) {
//有文件被修改
chgdLess = chg;
gulp.start('deploy_local_less', function(done) {
browserSync.reload();
});
}
});
//如果文件有修改,发布页面css代码
var _cbChgCss = function(chg) {
console.log('watch css', chg);
if (chg.type.match(/^(added|changed|deleted)$/i)) {
//有文件被修改
chgdCss = chg;
gulp.start('deploy_local_css', function(done) {
browserSync.reload();
});
}
};
gulp.watch(sourceDirName + "/**/*.css", {cwd: "./"}).on("change", _cbChgCss);
//如果文件有修改,发布页面js代码
gulp.watch(sourceDirName + "/**/*.js", {cwd: "./"}).on("change", function(chg) {
//{ type: 'changed', path: '' }
console.log('watch js', chg);
if (chg.type.match(/^(added|changed|deleted)$/i)) {
//有文件被修改
chgdFiles = chg;
gulp.start('deploy_local_js', function(done) {
browserSync.reload();
});
}
});
});
//如果文件有修改,同步最新less到目录 ./开发目录/ to ./发布目录/
gulp.task('deploy_local_less', ['dev'], function() {
console.log('deploy_local_less');
var all;
var chgdFiles = chgdLess;
syncModule.syncLess(chgdFiles, sourceDirName, targetDirName);
});
//如果文件有修改,同步最新css到目录 ./public/ to ../public/
gulp.task('deploy_local_css', function() {
var all;
var chgdFiles = chgdCss;
syncModule.syncCss(chgdFiles, isCompress, sourceDirName, targetDirName, prefixOfTargetDir);
});
//发布页面js代码 ./public/ to ../public/
gulp.task('deploy_local_js', function() {
var all = syncModule.syncJs(chgdFiles, isCompress, sourceDirName, targetDirName, prefixOfTargetDir);
return merge(
all
);
});
gulp.task('reload', function() {
browserSync.init({
server: {
baseDir: "./",
directory: true
}
});
browserSync.reload
});
gulp.task('gallery', function() {
browserSync.init({
server: {
baseDir: "./gallery/",
directory: true
}
});
//browserSync.reload
});
////////////////////////////
//重新发布测试环境
gulp.task('dev', [
'cleanCssFiles', 'less', 'deploy_local_css'
]);
//启动默认开发环境: gulp
gulp.task('default', [
]);