美文网首页
gulp构建项目——生产环境/开发环境、生成雪碧图

gulp构建项目——生产环境/开发环境、生成雪碧图

作者: 晴天守候 | 来源:发表于2020-08-14 09:32 被阅读0次

新建项目Gulp-Project,执行 npm init初始化项目生成package.json文件,然后再创建config文件夹,新建index.js(公共部分)、gulpfile.dev.js(开发环境)、gulpfile.prod.js(生产环境)。当然了,要打包编译的文件内容一般都放在都在根目录src里面。

项目结构:

Gulp-Project
├── README.md
├── config
│   ├── gulpfile.dev.js
│   ├── gulpfile.prod.js
│   └── index.js
├── gulpfile.js
├── package-lock.json
├── package.json
└── src
    ├── assets
    │   └── common.css
    ├── images
    │   ├── sprite_2
    │   │   ├── 01.jpg
    │   │   ├── 02.jpg
    │   │   └── 03.jpg
    │   └── t3.png
    ├── index.html
    ├── script
    │   └── index.js
    └── style
        ├── style.css
        └── style2.css

接下来开始写config文件夹里面的公共部分的js——index.js:

const SRC_DIR='./src/';   //源路径,不支持相对路径,下面也是
const DEV_DIR='./dev/';   //生成开发环境的文件
const DIST_DIR='./dist/';  //生成生产环境的文件

const config={
    src:SRC_DIR,
    dist:DIST_DIR,
    dev:DEV_DIR,
    html:{
        src:SRC_DIR+'*.html',
        dev:DEV_DIR,
        dist:DIST_DIR
    },
    assets:{
        src:SRC_DIR+'assets/**/*',
        dev:DEV_DIR+'assets',
        dist:DIST_DIR+'assets'
    },
    style:{
        src:SRC_DIR+'style/*.css',  //如果是scss或者css,就改对应的
        dev:DEV_DIR+'css',
        dist:DIST_DIR+'css'
    },
    script:{
        src:SRC_DIR+'script/*.js',
        dev:DEV_DIR+'js',
        dist:DIST_DIR+'js'
    },
    img:{
        src:SRC_DIR+'images/**/*.*',
        dev:DEV_DIR+'images',
        dist:DIST_DIR+'images'
    }
};

module.exports=config;  //把这个接口暴露给别的文件用

配置开发环境文件gulpfile.dev.js:

//配置开发的文件

const gulp = require('gulp'); //引用gulp插件
const $ = require('gulp-load-plugins')();  //自动加载插件,可以省略一个一个引用插件
const config = require('./index.js'); //引用配置的路径文件
const open = require('open'); //开启服务
const revCollector = require('gulp-rev-collector'); //来自清单的静态资产修订数据收集器(由不同的流生成),并替换其在html模板中的链接。

function dev() {
    gulp.task('html:dev', function () {
        var optins = {
            removeComments: true,//清除HTML注释
            collapseWhitespace: true, //压缩HTML
            minfyJS: true,//压缩JS
            minfyCss: true,//压缩CSS
        }
        return gulp.src(['./rev/**/*.json',config.html.src])
        // .pipe($.htmlmin(optins))
        .pipe(revCollector({
            replaceReved: true,//允许替换, 已经被替换过的文件
            dirReplacements: {
                'style': 'css',
                'script': 'js',
                // 'cdn/': function(manifest_value) {
                //     return '//cdn' + (Math.floor(Math.random() * 9) + 1) + '.' + 'exsample.dot' + '/img/' + manifest_value;
                // }
            }})) //替换html中的引用
        .pipe(gulp.dest(config.html.dev))
        .pipe($.connect.reload())
    });
    gulp.task('assets:dev', function () {
        return gulp.src(config.assets.src).pipe(gulp.dest(config.assets.dev)).pipe($.connect.reload())
    });
    gulp.task('style:dev', function () {
        return gulp.src(config.style.src)
        .pipe($.rev()) //添加hash后缀 -- 文件名加MD5后缀
        .pipe($.cssmin())
        .pipe($.autoprefixer({
            browseers: ['last 2 versions', 'Firefox>=20', 'last 2 Explorer versions', 'last 3 Safari versions'],
            cascade: true
        }))
        .pipe(gulp.dest(config.style.dev)) //新生成的文件路径
        .pipe($.rev.manifest()) //生成文件映射
        .pipe(gulp.dest("rev/css")) //将映射文件导出到rev/css中
        .pipe($.connect.reload())
    });
    gulp.task('script:dev', function () {
        return gulp.src(config.script.src)
        .pipe($.babel())
        .pipe($.uglify())
        .pipe(gulp.dest(config.script.dev))
        .pipe($.rev()) //添加hash后缀 -- 文件名加MD5后缀
        .pipe($.rev.manifest()) //生成文件映射
        .pipe(gulp.dest("rev/js")) //将映射文件导出到rev/js中
        .pipe($.connect.reload())
    });
    gulp.task('img:dev', function () {
        return gulp.src(config.img.src)
        .pipe($.imagemin({ progressive: true }))
        .pipe(gulp.dest(config.img.dev))
        .pipe($.connect.reload())
    });
    gulp.task('connect', function (cb) {
        $.connect.server({
            root: config.dev,
            port: 8081,
            livereload: true
        });
        open('http://localhost:8081');
        cb();//执行回调,表示这个异步任务已经完成,起通作用,这样会执行下个任务
    })
    gulp.task('watchs',function(){
        gulp.watch(config.html.src, gulp.series('html:dev'));
        gulp.watch(config.html.src, gulp.series('style:dev'));
        gulp.watch(config.html.src, gulp.series('script:dev'));
        gulp.watch(config.html.src, gulp.series('img:dev'));
    })
    gulp.task('dev', gulp.series(gulp.parallel('style:dev', 'script:dev','img:dev'),'html:dev','connect','watchs'), function () {
        // console.log('ok')
        // $.connect.server({
        //     root: config.dev,
        //     port: 8080,
        //     livereload: true
        // });
        // open('http://localhost:8080');
        // gulp.watch(config.html.src, ['html:dev']);
        // gulp.watch(config.html.src, ['style:dev']);
        // gulp.watch(config.html.src, ['script:dev']);
        // gulp.watch(config.html.src, ['img:dev']);
    })
}
module.exports = dev;

配置生产环境文件gulpfile.prod.js:

//配置生产的文件

const gulp = require('gulp'); //引用gulp插件
const $ = require('gulp-load-plugins')();  //自动加载插件,可以省略一个一个引用插件
const config = require('./index.js'); //引用配置的路径文件

function prod() {
    gulp.task('html', function () {
        return gulp.src(config.html.src).pipe($.fileInclude()).pipe(gulp.dest(config.html.dist))
    });
    gulp.task('assets', function () {
        return gulp.src(config.assets.src).pipe(gulp.dest(config.assets.dist))
    });
    gulp.task('style', function () {
        return gulp.src(config.style.src).pipe($.cssmin()).pipe($.autoprefixer({
            browseers: ['last 2 versions', 'Firefox>=20', 'last 2 Explorer versions', 'last 3 Safari versions'],
            cascade: true
        })).pipe($.cleanCss({ compatibility: 'ie8' }))
            .pipe(gulp.dest(config.style.dist))
    });
    gulp.task('script', function () {
        return gulp.src(config.script.src)
            .pipe($.babel())
            .pipe($.uglify())
            .pipe($.stripDebug({
                debugger: true, console: true, alert: false
            }))
            .pipe(gulp.dest(config.script.dist))
    });
    gulp.task('img', function () {
        return gulp.src(config.img.src).pipe($.imagemin()).pipe(gulp.dest(config.img.dist))
    });
    gulp.task('build', gulp.parallel('html', 'style', 'script', 'assets', 'img'))
}
module.exports = prod;

最后是gulpfile.js:把 config里的文件引入,这里还写有歇息公共的任务,雪碧图还有文件的清理都是放在这里。

const gulp = require('gulp');
const del = require('del');
const prod = require('./config/gulpfile.prod.js');
const dev = require('./config/gulpfile.dev.js');
const config = require('./config/index.js');
const $ = require('gulp-load-plugins')();

dev();  //启动开发环境,gulp dev
prod(); //启动生产环境,  gulp build

/*
gulp.task('clean', async function () {
  await gulp.src([config.dev, config.dist])
    .pipe($.clean());
});
*/
gulp.task('clean:dev', function() {//删除之前生成的文件
  return del(['dev','rev','dist']);
});
gulp.task('sprite', async function () {  //生成雪碧图,gulp sprite,分别生成dev和dist
  let spriteData = await gulp.src(config.src + '/images/sprite_2/*.{png,jpg,gif,ico,jpeg}')
    .pipe($.spritesmith({
      imgName: 'images/sprite_2.png',
      cssName: 'style/sprite.css',
      padding: 2, // 图片之间的间距
      algorithm: 'left-right', //图片排列格式,默认是top-down,我这里稍微修改下
      algorithmOpts: { sort: false } //是否排序
    }));

  return spriteData.pipe(gulp.dest(config.src)).pipe(gulp.dest(config.dist)).pipe(gulp.dest(config.dev));
});

最后再贴一下我的package.json,因为我为了方便,把启动命令也配在这个文件了:

  "scripts": {
    "dev": "gulp dev",
    "build": "gulp build",
    "del": "gulp clean:dev",
    "sprite": "gulp sprite"
  },

相关文章

  • gulp构建项目——生产环境/开发环境、生成雪碧图

    新建项目Gulp-Project,执行 npm init初始化项目生成package.json文件,然后再创建co...

  • JavaScript学习笔记(三十六)-- GULP

    GULP gulp 是一个项目开发的 自动化打包构建工具 基于 node 环境来运行的 什么是自动化打包构建工具 ...

  • NODE_ENV

    NODE_ENV(node environment):用来表示构建项目的当前环境,是生产环境/开发环境。 在pac...

  • webpack的性能优化

    webpack项目优化主要分为两个方面的优化,生产环境的代码优化和开发环境的项目构建优化 生产环境的代码优化 第一...

  • 前端构建工具之Gulp篇

    Gulp是一个构建系统,它能通过自动执行常见任务,比如编译预处理CSS,压缩JavaScript和雪碧图生成等等,...

  • 网站性能优化

    1、资源压缩合并 (1)图片:雪碧图 (2)JS、CSS合并:利用项目构建工具webpack、grunt、gulp...

  • webpack 性能优化

    webpack性能优化 开发环境性能优化 生产环境性能优化 开发环境性能优化 优化打包构建速度 优化调试功能 生产...

  • 『前端工程化』gulp(gulp3 && gul

    Gulp 什么是Gulp Gulp是基于Node.js的构建工具,我们使用它来集成前端开发环境,来构建自动化工作流...

  • 什么是开发环境、测试环境、生产环境、UAT环境、仿真环境?

    项目开发过程中什么是开发环境、测试环境、生产环境、UAT环境、仿真环境? 项目开发过程中什么是开发环境、测试环境、...

  • 2021-03-29

    课程规划小程序 安装依赖 开发环境启动 构建生产环境 项目规范 目录及命名规范 【Pages目录】页面级目录pla...

网友评论

      本文标题:gulp构建项目——生产环境/开发环境、生成雪碧图

      本文链接:https://www.haomeiwen.com/subject/cdybdktx.html