var gulp = require('gulp'),
plugins = require("gulp-load-plugins")({
pattern: '*'
}),
merge = require('merge-stream'),
path = {
html: 'html/**/*.html',
htmlDir: 'dest/',
css: 'css/*.css',
cssDir: 'dest/css',
less: 'less/*.less',
js: 'js/**/*.js',
jsDir: 'dest/js',
images: 'images/*.+(jpg|png|gif|svg)',
imagesDir: 'dest/images',
MockData: './dataJs/*'
},
middleware = [];
gulp.task('vendor', function () {
return merge(
gulp.src('node_modules/jquery/dist/*.*')
.pipe(gulp.dest('dest/js/vendor/jquery')),
gulp.src('node_modules/bootstrap/dist/**/*')
.pipe(gulp.dest('dest/js/vendor/bootstrap')),
gulp.src('node_modules/bootstrap-table/src/*.*')
.pipe(gulp.dest('dest/js/vendor/bootstrap-table'))
);
});
gulp.task('minifycss', function () {
return gulp.src(path.css)
.pipe(plugins.cssmin())
.pipe(gulp.dest(path.cssDir));
});
gulp.task('concatminifycss', function () {
return gulp.src(path.css)
.pipe(plugins.concat('main.css'))
.pipe(plugins.cssmin())
.pipe(gulp.dest(path.cssDir));
});
gulp.task('minifyjs', function () {
return gulp.src(path.js)
.pipe(plugins.uglify())
.pipe(gulp.dest(path.jsDir));
});
gulp.task('concatminifyjs', function () {
return gulp.src(path.js)
.pipe(plugins.concat('main.js'))
.pipe(gulp.dest(path.jsDir))
.pipe(plugins.rename({suffix: '.min'}))
.pipe(plugins.uglify())
.pipe(gulp.dest(path.jsDir));
});
gulp.task('html', function () {
gulp.src(path.html)
.pipe(plugins.replace('__VERSION', Date.now().toString(16)))
.pipe(plugins.htmlmin({
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeEmptyAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
minifyJS: true,
minifyCSS: true
}))
.pipe(gulp.dest(path.htmlDir))
.pipe(plugins.browserSync.stream());
});
gulp.task('image', function () {
gulp.src(path.images)
.pipe(plugins.imagemin({
optimizationLevel: 5,
progressive: true,
interlaced: true,
multipass: true
}))
.pipe(gulp.dest(path.imagesDir));
});
gulp.task('clean', function (cb) {
plugins.del(['dest/*'], cb)
});
gulp.task("less", function () {
gulp.src(path.less)
.pipe(plugins.less())
.pipe(gulp.dest(path.cssDir));
});
gulp.task("watch", function () {
gulp.watch(path.less, ['less']);
gulp.watch(path.css, ['concatminifycss']);
gulp.watch(path.html, ['html']);
gulp.watch(path.js, ['minifyjs']);
gulp.watch(path.images, ['image']);
});
gulp.task("build", ["clean"], function (cb) {
plugins.runSequence(['concatminifycss', 'image', 'less', 'vendor', 'minifyjs', 'html', "watch"], cb);
});
gulp.task("serve", ["build"], function () {
var path = require('path');
var url = require('url');
var fs = require('fs');
var uuid = require('uuid');
var Mock = require('mockjs');
middleware=function (req, res, next) {
var urlObj = url.parse(req.url, true),
method = req.method,
paramObj = urlObj.query,
mockUrl,
newSearch = '';
if (urlObj.pathname.match(/\..+$/) || urlObj.pathname.match(/\/$/)) {
next();
return;
}
console.log('[requist] ', method, urlObj.pathname, paramObj);
var rts = /([?&])_=[^&]*/;
if(rts.test( req.url)){
delete paramObj._;
if(JSON.stringify(paramObj) !== "{}"){
newSearch = '?';
newSearch += JSON.stringify(paramObj).replace(/[\"\{\}]/g,"").replace(/\:/g,"=").replace(/\,/g,"&");
}
}
var pathTree = urlObj.pathname.split('/');
console.log('[pathTree]',pathTree);
var mockDataFile = path.join(__dirname + path.sep + 'dataJs', pathTree[1]) + ".js";
fs.access(mockDataFile, fs.F_OK, function (err) {
var isImage = req.headers.accept.indexOf('image') != -1;
console.log('[err]',err);
if (err) {
var c = {
"success": false,
"data": null,
"failCode": 404,
"params": null,
"message": "无响应数据",
"notFound": mockDataFile
};
res.setHeader('Content-Type', (isImage ? 'image/*' : 'application/json'));
res.end(JSON.stringify(c));
next();
return;
}
try {
var data = require(mockDataFile) || {};
console.log('[data]',data);
var result,mockUrl = pathTree[2]+newSearch;
console.log('[mockUrl]',mockUrl);
if(data[mockUrl] && typeof data[mockUrl] === "object"){
result = Mock.mock(data[mockUrl]);
}else if(data[mockUrl]){
var params={body: JSON.stringify(paramObj)};
console.log('function');
result = Mock.mock(data[mockUrl](params));
}
isImage && (result = Mock.Random.image(data[pathTree[2]]));
console.log('[result]',result);
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', (isImage ? 'image/!*' : 'application/json'));
res.setHeader('tokenId', uuid.v1());
var s = result || {
"success": false,
"data": null,
"failCode": 0,
"params": null,
"message": null
};
res.end(JSON.stringify(s) || s);
} catch (e) {
console.error(e);
}
});
}
plugins.browserSync({
open: 'local',
port: 80,
online: false,
notify: false,
logLevel: "info",
logPrefix: "test",
logConnections: true,
logFileChanges: true,
scrollProportionally: false,
ghostMode: {
clicks: false,
forms: false,
scroll: false
},
server: {
baseDir: './dest',
middleware: middleware
}
});
});
gulp.task('default', ['serve']);
![这里写图片描述](https://img-blog.csdn.net/20170713155509656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjYxMjM5OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
- 使用require支持引入css:
require.js
css.js
css.min.js
css-builder.js
normalize.js
require.text.js