gulpfile.js demo

2021-06-23 07:06

阅读:586

标签:http   ssr   nano   div   proc   img   压缩图片   插件   支持   

var config = require("./build.config")   //获取build.config.js文件里的内容
var gulp = require("gulp")         //获取gulp模块
var sass = require(gulp-sass);          //gulp-sass模块是用于把sass转成css
var path = require("path")
var babel = require("gulp-babel"); //gulp-babel模块用于把es6转成es5
var postcss = require("gulp-postcss")    //项目中把scss文件转化成css文件
var autoprefixer = require(autoprefixer)    //autoprefixer根据当前浏览器的普及度以及属性支持提供给你前缀:
var postasset = require("postcss-assets")  //postcss-assets 插件用来处理图片和 SVG。在 CSS 声明中引用图片时,可以使用 resolve 加上图片路径的形式,如“resolve(‘logo.png’)”。https://www.ibm.com/developerworks/cn/web/1604-postcss-css/
var cssnano = require(cssnano)      //css文件压缩
var imagemin = require(gulp-imagemin);  //压缩图片文件
var pngquant = require(imagemin-pngquant);  //使用pngquant深度压缩png图片的imagemin插件
var uglify = require(gulp-uglify);         //压缩javascript文件
var cache = require(gulp-cache);          //静态资源缓存
var sourcemaps = require(gulp-sourcemaps);   //简单说,Source map就是一个信息文件,里面储存着位置信息。也就是说,转换后的代码的每一个位置,所对应的转换前的位置
var browserify = require(gulp-browserify);
var changed = require(gulp-changed);     //该插件能够实现只编译或打包改变过文件,大大加快了gulp task的执行速度。
var runSequence = require(run-sequence);    //让gulp任务,可以相互独立,解除任务间的依赖,增强task复用
livereload = require(gulp-livereload);     //不用F5了,实时自动刷新页面来开发
var rev = require(gulp-rev)                 //对文件加md5后缀
var revCollector = require(gulp-rev-collector);   //文件路径替换
var log = console.log.bind(console);
var prefix = require(gulp-prefix);   //给引用了静态资源的的HTML文件替换引用和加CDN前缀
require(shelljs/global)

gulp.task(d, function () {
    livereload.listen();
    gulp.watch(src/**/*.*, function (file) {   //关查src下的所有文件
        log("File " + file.path + " changed!");
        if (file.path.endsWith(".scss")) {    //如果文件后缀是.scss
            gulp.run("css")
        } else if (file.path.endsWith(".jsx")) {   //如果文件后缀是.jsx
            gulp.run("js") 
        } else {
            livereload.changed(file.path);
        }
    })
    log("     ***** Watching " + "[crtl+c to stop.] ******     ");
});

gulp.task(r, function (callback) {
    rm(-rf, config.distRoot)
    runSequence(["js:r", "css:r"], "revCss", "revJs", callback)
});
css()
css(":r")
js()
js(":r")
gulp.task("default", ["r"]);

function js(type) {
    gulp.task("js" + (type || ""), function () {
        var stream = gulp.src(config.jsSrc)
            .pipe(changed(config.jsDist))
            .pipe(sourcemaps.init())
            .pipe(babel({
                presets: [es2015]
            }))
            .pipe(browserify({
                debug: false
            }))
        if (type == ":r") {
            stream = stream.pipe(uglify({compress: {warnings: true}}))
                .pipe(sourcemaps.write("./sources_maps"))
                .pipe(rev())
                .pipe(gulp.dest(config.jsDist))
                .pipe(rev.manifest())
                .pipe(gulp.dest(./rev/js))
        } else {
            stream.pipe(gulp.dest("./src/static/js"))
        }
        return stream;
    });
}
function css(type) {
    var processors = [
        postasset,
        autoprefixer({
            browsers: [last 2 versions, Android >= 4.1],
            cascade: true,
            remove: true
        })
    ];
    var depend = [];
    if (type == ":r") {   // 如果是打包线上版本
        processors.push(cssnano());  压缩css
        depend[0] = "img"
    }
    gulp.task(css + (type || ""), depend, function () {
        var stream = gulp.src(config.cssSrc)
            .pipe(changed(config.cssDist))
            .pipe(sass())
            .pipe(postcss(processors))
        //.pipe(rename(function (path) {
        //    path.extname = ".css"
        //}))

        if (type == ":r") {
            stream.pipe(rev())
                .pipe(gulp.dest(config.cssDist))
                .pipe(rev.manifest())
                .pipe(gulp.dest(./rev/css));
        } else {
            stream.pipe(gulp.dest("./src/static/css"))
        }
    });
}


gulp.task(img, function () {
    gulp.src(config.imgSrc)
        .pipe(cache(imagemin({   //缓存压缩图片
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()]
        })))
        .pipe(gulp.dest(config.imgDist));
});

gulp.task(revCss, function () {
    return gulp.src([./rev/css/*.json, ./src/*.html])   //读取rev下面的.json文件,来替换html里面对应的文件名字
        .pipe(revCollector())                         //替换html中对应的记录
        .pipe(gulp.dest(config.distRoot));
});

gulp.task(revJs, function () {
    return gulp.src([./rev/js/*.json, config.distRoot+"*.html"])
        .pipe(revCollector())
        .pipe(gulp.dest(config.distRoot));
});

gulp.task(prefix, function(){
    gulp.src(config.distRoot+"*.html")
        .pipe(prefix(config.cdnUrl, null, {{))
        .pipe(gulp.dest(config.distRoot));
});

gulp.task(img:clear, function (done) {  //清除图片缓存
    return cache.clearAll(done);
});

 

gulpfile.js demo

标签:http   ssr   nano   div   proc   img   压缩图片   插件   支持   

原文地址:http://www.cnblogs.com/myzy/p/7162034.html


评论


亲,登录后才可以留言!