Giter VIP home page Giter VIP logo

glup's Introduction

Gulp

配置

类似于grunt,都是基于Node.js的前端构建工具。不过gulp压缩效率更高

工具和原料

方法和步骤

首先要确保系统上装有node,然后在全局环境和项目文件中安装gulp

npm install gulp -g # global环境
npm install gulp --save-dev # 项目环境

在项目中安装需要的gulp插件,一般只压缩的话需要

npm install gulp-minify-css gulp-concat gulp-uglify gulp-rename del --save-dev

更多插件可以在这个链接中找到 http://gratimax.net/search-gulp-plugins

在项目的根目录新建gulpfile.js,引入需要的模块

var gulp = require('gulp'),
    minifycss = require('gulp-minify-css'),
    concat = require('gulp-concat'),
    uglify = require('gulp-uglify'),
    rename = require('gulp-rename'),
    del = require('del');

压缩css文件

gulp.task('minifycss', function() {
    return gulp.src('src/*.css') //压缩的文件
        .pipe(gulp.dest('minified/css')) //输出文件夹
        .pipe(minifycss()); //执行压缩
});

压缩js文件

gulp.task('minifyjs', function() {
    // gulp.src([])可以用数组的形式加载不同格式,不同位置的文件
    return gulp.src('src/*.js')
        .pipe(concat('main.js')) //合并所有js到main.js
        .pipe(gulp.dest('minified/js'))  //输出main.js到文件夹
        .pipe(rename({suffix: '.min'}))  //rename压缩后的文件名
        .pipe(uglify()) //压缩
        .pipe(gulp.dest('minified/js')); //输出
});

执行压缩前,先删除文件夹里的内容

gulp.task('clean', function(cb) {
    del(['minified/css', 'minified/js'], cb)
});

默认命令,在cmd中输入gulp后,执行的就是这个命令

gulp.task('default', ['clean'], function() {
    gulp.start('minifycss', 'minifyjs');
});

然后只要cmd中执行gulp即可

插件开发

借助through2模块处理流,封装一个函数去处理

var { dest, src } = require('gulp');
var through = require('through2');
src('./input.txt').pipe(((prefix) => {
    console.log(prefix)
    if (!prefix) {
        prefix = "";
    }
    var prefix = Buffer.from(prefix);
    var stream = through.obj(function (file, encoding, callback) {
        // 如果file类型不是buffer 退出不做处理
        if (!file.isBuffer()) {
            return callback();
        }
        // 将字符串加到文件数据开头
        file.contents = Buffer.concat([prefix, file.contents]);
        // 确保文件会传给下一个插件
        this.push(file);
        // 告诉stream引擎,已经处理完成
        callback();
    });
    return stream;
})('')).pipe(dest('./output'));

开发时候注意要理解流的概念,through处理后的file对象是一个vinyl类型,vinyl可以理解为是buffer加了路径的类型,如下面这个例子

var Vinyl = require('vinyl');
var file = new Vinyl({
    cwd: '/',
    base: '/test/',
    path: '/test/file.js',
    contents: Buffer.from('Yao')
}); // <File "file.js" <Buffer 59 61 6f>>
var prefix = Buffer.from('Eno'); // <Buffer 45 6e 6f>
// bufferData经过through处理为gulp能识别的流形式,再用pipe处理
var bufferData = Buffer.concat([prefix, file.contents]); // <Buffer 45 6e 6f 59 61 6f>

我们可以使用file.contents转化为Buffer类型,结合Buffer.from(string)Buffer.concat()制作一个新的Buffer数据,然后通过through处理为gulp能识别的流,注意throughstream的流形式是不兼容的,虽然他们都有pipe方法

glup's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

glup's Issues

gulp环境配置

常用模块演示

目录结构
这里写图片描述
代码如下

var gulp = require('gulp'),
    minifycss = require('gulp-minify-css'),
    //minifyhtml = require('gulp-minify-html'),
    concat = require('gulp-concat'),
    uglify = require('gulp-uglify'),
    //imagemin = require('gulp-imagemin'),
    rename = require('gulp-rename'),
    del = require('del'),
    less = require('gulp-less');

gulp.task('less', function () {
    return gulp.src('less/bootstrap.less')
        .pipe(less())
        .pipe(gulp.dest('dist/style'));
});
gulp.task('minify', function() {
    return gulp.src(['js/*.js'])
        .pipe(concat('main.js')) //合并所有js到main.js
        .pipe(rename({
            suffix: '.min'
        })) //rename压缩后的文件名 让main.js变成main.min.js
        .pipe(uglify()) //执行压缩
        .pipe(gulp.dest('./dist/js'))
});
gulp.task('minifycss', function() {
    return gulp.src('./style/*.css') //压缩的文件
        .pipe(concat('main.css')) //合并所有js到main.js
        .pipe(rename({
            suffix: '.min'
        }))
        .pipe(minifycss())
        .pipe(gulp.dest('./dist/style')); //输出文件夹
});

gulp.task('imagemin', function() {
    return gulp.src('./images/*.+(jpeg|jpg|png)')
        .pipe(imagemin({
            optimizationLevel: 7, //类型:Number  默认:3  取值范围:0-7(优化等级)
            progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
            interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
            multipass: true //类型:Boolean 默认:false 多次优化svg直到完全优化
        }))
        .pipe(gulp.dest('./dist/images'));
});

gulp.task('default', ['minify', 'minifycss', 'less', 'imagemin']);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.