Public
Snippet $1 authored by cephei

Gulp Build Script

Edited
gulp.js
/**
 * Created by cephe on 2017/7/8.
 */
const gulp = require("gulp");
const gulpUtil = require("gulp-util");
const CacheBuster  = require('gulp-cachebust');
cacheBust = new CacheBuster();
const sequence =  require('gulp-sequence');
const clean = require('gulp-clean');
const webpack = require("webpack");
const WebpackDevServer = require("webpack-dev-server");
const webpackStream = require("webpack-stream");
const paths = require("./build_scripts/paths");
const upload = require('gulp-qndn').upload;
const cdnizer = require("gulp-cdnizer");


gulp.task("run",["webpack:dev-server"],function(){

});

gulp.task("webpack:dev-server",function(){
    let webpackConfig = require("./build_scripts/webpack.dev.config");
    let compiler = webpack(webpackConfig);
    new WebpackDevServer(compiler).listen(8080, '0.0.0.0', function (err) {
        if (err) throw new gulpUtil.PluginError('webpack-dev-server', err);
        gulpUtil.log('[webpack-dev-server]', 'http://localhost:8080/');
    });
});


gulp.task("build-package",[],function(){
    return gulp.src(paths.devPath+paths.packagePath+"**/*.*")
        .pipe(gulp.dest(paths.buildPath+paths.packagePath));
});
gulp.task("build-img",[],function(){
    return gulp.src(paths.devPath+paths.imagePath+"**/*.*")
        .pipe(gulp.dest(paths.buildPath+paths.imagePath));
});
gulp.task("build-font",[],function(){
    return gulp.src(paths.devPath+paths.fontPath+"**/*.*")
        .pipe(gulp.dest(paths.buildPath+paths.fontPath));
});

gulp.task("build-js",[],function(){
    let webpackConfig = require("./build_scripts/webpack.dist.config");
    return gulp.src(paths.devPath+paths.sourcePath+"*.js")
        .pipe(webpackStream(webpackConfig,webpack))
        .pipe(gulp.dest(paths.buildPath));
});

gulp.task("build-html",[],function(){
    return gulp.src(paths.devPath+"*.html")
        .pipe(gulp.dest(paths.buildPath));
});

gulp.task("build-clean",[],function(){
    return gulp.src(paths.buildPath,{read: false})
        .pipe(clean());
});

gulp.task("build",sequence("build-clean","build-js","build-img","build-font","build-html","build-package"));

gulp.task("release-package",[],function(){
    return gulp.src(paths.buildPath+paths.packagePath+"**/*.*")
        .pipe(gulp.dest(paths.distPath+paths.packagePath));
});

gulp.task("release-font",[],function(){
    return gulp.src(paths.buildPath+paths.fontPath+"**/*.*")
        .pipe(cacheBust.resources())
        .pipe(gulp.dest(paths.distPath+paths.fontPath));
});

gulp.task("release-img",[],function(){
    return gulp.src([paths.buildPath+paths.imagePath+"**/*.*",`!${paths.buildPath+paths.imagePath}dyn-img`])
        .pipe(cacheBust.resources())
        .pipe(gulp.dest(paths.distPath+paths.imagePath));
});

gulp.task("release-dynamic-img",[],function(){
    return gulp.src([paths.buildPath+paths.imagePath+"dyn-img/**/*.*"])
        .pipe(gulp.dest(paths.distPath+paths.imagePath+"dyn-img"));
});


gulp.task("release-css",[],function(){
    return gulp.src(paths.buildPath+paths.cssPath+"*.css")
        .pipe(cacheBust.references())
        .pipe(cacheBust.resources())
        .pipe(gulp.dest(paths.distPath+paths.cssPath));
});

gulp.task("release-js",[],function(){
    return gulp.src(paths.buildPath+paths.javascriptPath+"*.js")
        .pipe(cacheBust.references())
        .pipe(cacheBust.resources())
        .pipe(gulp.dest(paths.distPath+paths.javascriptPath))
});

gulp.task("release-html",[],function(){
    return gulp.src(paths.buildPath+"/*.html")
        .pipe(cacheBust.references())
        .pipe(gulp.dest(paths.distPath))
});

gulp.task("release-clean",[],function(){
    return gulp.src(paths.distPath,{read: false})
        .pipe(clean());
});

gulp.task("release",sequence("release-clean","build",["release-img","release-dynamic-img","release-font"],"release-js","release-css","release-html","release-package"));
//@Deprecated  WARNING:this task will be removed
gulp.task("build-dist",["release"],function(){

});

const qnOptions = {
    accessKey: 'uowHFB7KKRYXjThk7way8IxSQdAKwow8OSNGh3xo',
    secretKey: 'qLoFUT7jpgKQUqOPt2AIkdQZDpM9zNft23meQozm',
    bucket: 'blog-space',
    origin: 'blog-space.qiniudn.com',
};

const cdnUrl = `//${qnOptions.origin}/`;

gulp.task("release-package-qn",[],function(){
    return gulp.src(paths.buildPath+paths.packagePath+"**/*.*")
        .pipe(upload({qn: qnOptions,prefix:paths.packagePath}));
});

gulp.task("release-font-qn",[],function(){
    return gulp.src(paths.buildPath+paths.fontPath+"**/*.*")
        .pipe(cacheBust.resources())
        .pipe(upload({qn: qnOptions,prefix:paths.fontPath}));
});

gulp.task("release-img-qn",[],function(){
    return gulp.src([paths.buildPath+paths.imagePath+"**/*.*",`!${paths.buildPath+paths.imagePath}dyn-img/**/*`])
        .pipe(cacheBust.resources())
        .pipe(upload({qn: qnOptions,prefix:paths.imagePath}));
});

gulp.task("release-dynamic-img",[],function(){
    return gulp.src([paths.buildPath+paths.imagePath+"dyn-img/**/*.*"])
        .pipe(upload({qn: qnOptions,prefix:paths.imagePath+"dyn-img/"}));
});

gulp.task("release-css-qn",[],function(){
    return gulp.src(paths.buildPath+paths.cssPath+"*.css")
        .pipe(cacheBust.resources())
        .pipe(cacheBust.references())
        .pipe(cdnizer({
            defaultCDNBase: cdnUrl,
            relativeRoot: '',
            files: ['/asset/**/*']
        }))
        .pipe(upload({qn: qnOptions,prefix:paths.cssPath}))
});

gulp.task("release-js-qn",[],function(){
    return gulp.src(paths.buildPath+paths.javascriptPath+"*.js")
        .pipe(cacheBust.references())
        .pipe(cacheBust.resources())
        .pipe(cdnizer({
            defaultCDNBase: cdnUrl,
            relativeRoot:'',
            matchers: [
                {
                    pattern: /(["'])(\.\/asset\/img\/.+?)(['"])/gi,
                    fallback: false
                }
            ],
            files: ['asset/**/*']
        }))
        .pipe(upload({qn: qnOptions,prefix:paths.javascriptPath}));
});

gulp.task("release-html-qn",[],function(){
    return gulp.src(paths.buildPath+"/*.html")
        .pipe(cacheBust.references())
        .pipe(cdnizer({
            defaultCDNBase: cdnUrl,
            relativeRoot: '',
            files: ['asset/**/*']
        }))
        .pipe(cdnizer({
            defaultCDNBase: cdnUrl,
            relativeRoot: '',
            files: ['js/**/*']
        }))
        .pipe(cdnizer({
            defaultCDNBase: cdnUrl,
            relativeRoot: '',
            files: ['package/**/*']
        }))
        .pipe(gulp.dest(paths.distPath))
});

gulp.task("release-qn",sequence("release-clean","build",["release-img-qn","release-font-qn"],"release-js-qn","release-css-qn","release-html-qn","release-package-qn"));