项目自动化构建工具 - gulp

gulp 是基于 node 实现 Web 前端自动化开发的工具,利用它能够极大的提高开发效率。

使用gulp前需要安装node,npm。

一、安装gulp:

1、全局安装gulp

npm install gulp -g

2、局部安装(项目内)

npm install gulp --save-dev

二、gulp项目配置文件

在项目下新建 gulpfile.js

配置基本内容:

var gulp = require('gulp');


// 注册一个任务
gulp.task('taskName', function(){
    console.log('执行回调')
})


// 默认任务,执行gulp时自动执行
gulp.task('default',function(){
    console.log('执行回调')
});


运行默认任务:

gulp default    // 默认任务 default可以省略
gulp

运行自定义的任务

gulp taskName

三、合并压缩 js

压缩 js文件需要安装gulp插件:gulp-uglify

npm install gulp-uglify --save-dev

合并 js文件需要安装gulp插件: gulp-concat

npm install gulp-concat --save-dev

合并压缩 js文件的配置:

var gulp = require('gulp');
var uglify = require('gulp-uglify');    // js压缩插件
var concat = require('gulp-concat');    // 合并插件
var rename = require('gulp-rename');    // 重命名插件




// 注册js合并压缩任务
gulp.task('js', function(){
    return gulp.src('js/**/*.js')            // 引入 js/**/下的所有需要压缩的js文件
        .pipe(concat('build.js'))            // 合并后的命名
        .pipe(gulp.dest('dist/js/'))         // 合并后的输出路径
        .pipe(uglify())                      // 执行压缩
        .pipe(rename({ suffix: '.min' }))    // 压缩后的名称,拓展压缩后的后缀添加 .min
        .pipe(gulp.dest('dist/js/'))         // 合并压缩后的输出路径(会继承以上管道的内容)
});


// 默认任务
gulp.task('default',['js']);


四、合并压缩css。gulp-clean-css 和 gulp-minify-css 皆可

合并压缩css文件需要安装的gulp插件(合并后压缩):gulp-clean-css

npm install gulp-clean-css --save-dev

合并压缩css文件需要安装的gulp插件(合并后压缩): gulp-minify-css

npm install gulp-minify-css --save-dev

合并压缩 css文件的配置:

var gulp = require('gulp');
var concat = require('gulp-concat');         // 合并插件
var cssClean = require('gulp-clean-css');    // 引入css压缩插件(两者皆可)
var minifycss = require('gulp-minify-css');  // 引入css压缩插件(两者皆可)
var rename = require('gulp-rename');         // 引入重命名插件




// 注册css的合并压缩任务
gulp.task('css', function () {
    return gulp.src('css/*.css')                // 获取css源文件
        .pipe(concat('build.css'))              // 合并后的命名
        .pipe(gulp.dest('dist/css/'))           // 合并后输出路径
        .pipe(minifycss())                      // 压缩合并后的css
        .pipe(rename({ suffix: '.min' }))       // 压缩后重命名,拓展添加后缀.min
        .pipe(gulp.dest('dist/css/'))           // 压缩后的输出路径
});


// 默认任务
gulp.task('default',['css']);


 

五、编译less。(将less预处理语言编译成css)

编译less需要安装gulp插件: gulp-less

npm install gulp-less --save-dev

编译less的配置:

var gulp = require('gulp');
var rename = require('gulp-less');         // 引入less编译插件




// 注册less的编译任务
gulp.task('less',function () {
    return gulp.src('less/*.less')    // 获取less源文件
        .pipe(less())                 // 将less编译为css
        .pipe(gulp.dest('css/'))      // 输出文件路径
});


// 默认任务
gulp.task('default',['less']);

 

六、压缩html文件

压缩html文件需要安装的插件: gulp-htmlmin

npm install gulp-htmlmin --save-dev

压缩html文件的配置:

var gulp = require('gulp');
var htmlmin = require('gulp-htmlmin');         // 引入html的压缩插件




// 注册html的压缩任务
gulp.task('html', function () {
    return gulp.src('*.html')                            // 获取源文件
        .pipe(htmlmin({collapseWhitespace:true,}))       // 是否去除标签之间的空白
        .pipe(gulp.dest('dist/'))                        // 文件输出路径
});


// 默认任务
gulp.task('default',['html']);

 

 

七、监视文件修改自动进行压缩合并编译

需要安装插件: gulp-livereload

npm install gulp-livereload --save-dev

配置方式:

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var cssClean = require('gulp-clean-css');
var minifycss = require('gulp-minify-css');
var less = require('gulp-less');
var htmlmin = require('gulp-htmlmin');
var livereload = require('gulp-livereload');



// 注册js合并压缩任务
gulp.task('js', function(){
    return gulp.src('js/*.js')
        .pipe(concat('build.js'))
        .pipe(gulp.dest('dist/js/'))
        .pipe(uglify())
        .pipe(rename({ suffix: '.min' }))
        .pipe(gulp.dest('dist/js/'))
        .pipe(livereload())        // 需要为每个任务添加监视
});

// 注册less的编译任务
gulp.task('less',function () {
    return gulp.src('less/*.less')
        .pipe(less())   // 将less编译为css
        .pipe(gulp.dest('css/'))
        .pipe(livereload())       // 需要为每个任务添加监视
});

// 注册css的合并压缩任务
gulp.task('css', function () {
    return gulp.src('css/*.css')
        .pipe(concat('build.css'))
        .pipe(gulp.dest('dist/css/'))
        .pipe(minifycss())
        .pipe(rename({ suffix: '.min' }))
        .pipe(gulp.dest('dist/css/'))
        .pipe(livereload())       // 需要为每个任务添加监视
});

// 注册html的压缩任务
gulp.task('html', function () {
    return gulp.src('*.html')
        .pipe(htmlmin({collapseWhitespace:true,}))
        .pipe(gulp.dest('dist/'))
        .pipe(livereload())       // 需要为每个任务添加监视
});

// 注册自动任务(半自动)  
gulp.task('watch',function () {
    livereload.listen();    // 开始监听
    gulp.watch('js/*.js',gulp.series('js'))
    gulp.watch('less/*.less',gulp.series('less','css'))
    gulp.watch('css/*.css',gulp.series('css'))
    gulp.watch('*.html',gulp.series('html'))
});



gulp.task('default',['js','less','css','html','watch']);


 

八、热更新(监视文件更新,编译合并压缩后并且自动刷新浏览器中打开的页面)

安装所需插件

npm install gulp-connect --save-dev

配置方式:

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var cssClean = require('gulp-clean-css');
var minifycss = require('gulp-minify-css');
var less = require('gulp-less');
var htmlmin = require('gulp-htmlmin');
var connect = require('gulp-connect');



// 注册js合并压缩任务
gulp.task('js', function(){
    return gulp.src('js/*.js')
        .pipe(concat('build.js'))
        .pipe(gulp.dest('dist/js/'))
        .pipe(uglify())
        .pipe(rename({ suffix: '.min' }))
        .pipe(gulp.dest('dist/js/'))
        .pipe(connect.reload())        // 给每一个任务添加监视
});

// 注册less的编译任务
gulp.task('less',function () {
    return gulp.src('less/*.less')
        .pipe(less())   // 将less编译为css
        .pipe(gulp.dest('css/'))
        .pipe(connect.reload())        // 给每一个任务添加监视
});

// 注册css的合并压缩任务
gulp.task('css', function () {
    return gulp.src('css/*.css')
        .pipe(concat('build.css'))
        .pipe(gulp.dest('dist/css/'))
        .pipe(minifycss())
        .pipe(rename({ suffix: '.min' }))
        .pipe(gulp.dest('dist/css/'))
        .pipe(connect.reload())        // 给每一个任务添加监视
});

// 注册html的压缩任务
gulp.task('html', function () {
    return gulp.src('*.html')
        .pipe(htmlmin({collapseWhitespace:true,}))
        .pipe(gulp.dest('dist/'))
        .pipe(connect.reload())        // 给每一个任务添加监视
});


// 注册服务器自动更新任务(全自动)
gulp.task('connect',function () {
    // 配置服务器
    connect.server({
        root: 'dist/',  // 配置源文件根目录
        port: '8888',   // 配置端口
        livereload: true,   // 是否自动更新
    })
    gulp.watch('js/*.js',['js'])
    gulp.watch('less/*.less',['less','css'])
    gulp.watch('css/*.css',['css'])
    gulp.watch('*.html',['html'])

});

gulp.task('default',['js','less','css','html','connect']);


 

九、实现跨域

在服务器模式基础上进行实现跨域。

1、安装插件:http-proxy-middleware。

npm install --save-dev http-proxy-middleware

2、引入插件

var proxy = require('http-proxy-middleware');

3、引用示例

// 注册服务器自动更新任务(全自动)
gulp.task('connect',function () {
    // 配置服务器
    connect.server({
        root: 'dist',  // 配置源文件根目录
        port: '8888',   // 配置端口
        livereload: true,   // 是否自动更新

        middleware: function () {    // 作为中间件引用
            return [           // 返回的是一个数组,可定义多个域名代理
                proxy("/api",{        // 跨域域名前缀,前面加入此前缀可代理以下定义的域名
                    target:"https://yourdmain.com/",      // 代理的域名  
                    changeOrigin:true
                })
            ]
        }

    })
    gulp.watch('js/*.js',gulp.series('js'))
    gulp.watch('less/*.less',gulp.series('less','css'))
    gulp.watch('css/*.css',gulp.series('css'))
    gulp.watch('*.html',gulp.series('html'))
});

 

十、gulp4.0与gulp3.0的差异

任务依赖的编写方式有所改变

gulp3.0书写方式:

gulp.task('default',['js','less','css','html','connect'], function(){});

gulp4.0书写方式():

// 任务同步执行
gulp.task('default',gulp.series(['js','less','css','html','connect'], function(){}));
// 任务异步执行
gulp.task('default',gulp.parallel(['js','less','css','html','connect'], function(){}));

gulp4.0以后task方式只接受两个参数

 

 

注:不喜勿喷,欢迎讨论

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值