摘要:概述最近研究了下工作流,先说一下我司的情况,我司现在是端用直出,用构建,部分就不进行描述了,因为网上的构建方法都是很成熟的了。
概述
最近研究了下工作流,先说一下我司的情况,我司现在是pc端用php直出,h5用vuejs构建,vuejs部分就不进行描述了,因为网上的构建方法都是很成熟的了。
以下是php直出,需要向后台同学提供html文件的构建方法。调试都是在本地调试的,调试完成后打包生成html交付给后台同学。
http-server 模拟数据,调试ajax
webpack 打包js,模块化管理
gulp打包css,压缩css, 压缩图片
项目目录|- apps //html文件
|- dist
|- css //存放压缩打包后的css
|- js //webpack 自动打包的js
|- images //压缩后的图片
//这里还有打包后的html文件
|- mock //模拟数据,json
|- ssi //生成的ssi页面片
|- js //js源文件
|- common 公共模块
|- 业务js
|- css
|- sass //sass源文件
|- common 公共sass函数
|- 业务css
|- stylesheets //编译后的css 开发时引入 compass编译
|- images
原图片
修改依赖包内容
因为rev默认生成的版本号是加在静态文件文件名上的,如main-d3id7340.js这样会造成服务器上有n多的js,所以我们希望生成main.js?v=233333这样的版本号,在配合ssi就能很好的维护,以后如果只涉及修改静态文件的时候,就只用重新上传静态文件和ssi页面片就可以了,不需要再去改php中的引用,所以在网上找到了一个方法。
打开node_modulesgulp-revindex.js
第133行 manifest[originalFile] = revisionedFile;
更新为: manifest[originalFile] = originalFile + "?v=" + file.revHash;
打开nodemodulesgulp-revnodemodulesrev-pathindex.js
10行 return filename + "-" + hash + ext;
更新为: return filename + ext;
打开node_modulesgulp-rev-collectorindex.js
31行 if ( path.basename(json[key]).replace(new RegExp( opts.revSuffix ), "" ) !== path.basename(key) ) {
更新为: if ( path.basename(json[key]).split("?")[0] !== path.basename(key) ) {
gulp打包
gulpfile.js如下
var gulp = require("gulp");
var minicss = require("gulp-cssmin");
var useref = require("gulp-useref");
var imagemin = require("gulp-imagemin");
var pngquant = require("imagemin-pngquant");
var gulpif = require("gulp-if");
var yargs = require("yargs");
var rev = require("gulp-rev");
var revCollector = require("gulp-rev-collector");
var replace = require("gulp-replace");
var runSequence = require("run-sequence");
var output = "dist";
//获取输入的参数
var argv = yargs.argv,
name = argv.name,
type;
if(argv.type == "pub"){
type = "";
}else if(argv.type == "test"){
type = ".test"
}
//合并html里用到的css
gulp.task("csscombine",function(){
return gulp.src("apps/"+name+"/*")
.pipe(useref())
.pipe(gulpif("*.css", minicss()))
.pipe(gulp.dest("dist"));
});
//压缩css,生成css版本号
gulp.task("css", function(){
return gulp.src("dist/css/"+name+"/*.css")
.pipe(rev())
.pipe(gulp.dest("dist/css/"+name))
.pipe( rev.manifest() )
.pipe( gulp.dest( "rev/css" ) );
});
//生成js版本号
gulp.task("js", function(){
return gulp.src("dist/js/"+name+"/*.js")
.pipe(rev())
.pipe(gulp.dest("dist/js/"+name))
.pipe( rev.manifest() )
.pipe( gulp.dest( "rev/js" ) );
});
//压缩图片
gulp.task("imagemin", function(){
return gulp.src("images/"+name+"/*")
.pipe(imagemin({
progressive: true,
svgoPlugins: [{removeViewBox: false}],
use: [pngquant()]
}))
.pipe(gulp.dest(output + "/images/"+name));
})
//生成cssi页面片
gulp.task("cssi",function(){
return gulp.src(["rev/**/*.json","ssi/cssi/cssi.html"])
.pipe(replace("{name}",name))
.pipe(replace("{type}",type))
.pipe( revCollector())
.pipe(gulp.dest("ssi/cssi/"+name));
});
//生成jsi页面片
gulp.task("jsi", function(){
return gulp.src(["rev/**/*.json","ssi/jsi/jsi.html"])
.pipe(replace("{name}",name))
.pipe(replace("{type}",type))
.pipe( revCollector())
.pipe(gulp.dest("ssi/jsi/"+name));
});
//替换html里的路径
gulp.task("replacehtml",function(){
var scriptReg = new RegExp("