美文网首页让前端飞简友广场程序员
【前端工具】gulp构建工具的基本使用

【前端工具】gulp构建工具的基本使用

作者: hijackli | 来源:发表于2019-03-22 20:55 被阅读71次
gulp

gulp是什么?

  • gulp是前端开发中经常使用的自动化构建工具。自动化构建又是什么?
  • 简单来说,一个完整的项目需要经历两个过程:开发阶段development和项目上线阶段production。在程序中又常称作开发环境和生产环境,其实并没有多少含义,只是为了理清业务逻辑而已,了解就好。
  • 在开发环境我们的项目代码需要把less转成css(因为less不能直接被浏览器解析),需要给css3中的属性添加前缀,需要开启服务器自动监听文件的变化(改了一个宽度颜色啊,改了一个函数方法啊等等),然后自动刷新页面(减少手动操作,提高开发效率)。等等一些需要在开发阶段解决的问题
  • 在生产环境我们的项目代码也要进行许多处理,比如代码的压缩、图片压缩、去除调试语句、提取公共代码等等。
  • 所以,自动化构建简单来说就是进行上面的操作的,而自动化构建工具就集成了这一大堆的操作,大大提高了开发效率。

那我们一起来用gulp构建一个简单的项目吧

提前操作:创建项目基本结构

基本目录结构

第一步:安装gulp

  • npm install gulp -g 安装全局gulp
  • 以下都以gulp@3.9.1版本为例,4.x版本请参考其他文档。如果不小心下载了4版本,可以使用npm install gulp@3.9.1 -g操作来覆盖之前的版本
  • npm init -y 初始化项目
  • npm install gulp -D 安装局部gulp依赖

第二步:在项目根目录下创建一个名为gulpfile.js文件

  • gulpfile.js类似webpack中的配置文件,就是配置你到底要做哪些操作。
  • 在gulpfile.js文件中写入如下基础代码,基本含义是:加载gulp模块工具,然后创建默认任务,default是固定写法不能改变。后面的函数就是要执行的操作。而task方法就是创建任务的gulp方法。
  //gulpfile.js
  
  var gulp = require('gulp');
  
  gulp.task('default', function() {
      //将你的默认的任务操作代码放在这里
  })
  • 还可以这样写用来把任务操作抽出
  //gulpfile.js
  
  var gulp = require('gulp');
  
  gulp.task("html", function () {}) //创建html操作任务。"html"只是名称,可以任意取
  gulp.task("css", function () {})  //创建css操作任务
  gulp.task("js", function () {})   //创建js操作任务
  
  //创建默认执行任务,执行内容是 html操作任务、css操作任务、js操作任务
  gulp.task('default', ["html","css","js"]) 

第三步:运行gulp

  • 命令行执行
    $ gulp
  • 默认的名为"default"的任务将会被运行。

第四步:创建几个基本任务

  • 创建"default"默认任务并把任务操作分发给其他任务
  • 创建"html"任务用于对html文件的操作
  • 创建"css"任务用于对css文件的操作
  • 创建"js"任务用于对js文件的操作
  • 创建"image"任务用于对图片的操作
//gulpfile.js

    //加载gulp模块
    var gulp = require('gulp');

    // 创建html任务
    gulp.task("html", function () {
    
    })
    // 创建css任务
    gulp.task("css", function () {
    
    })
    // 创建js任务
    gulp.task("js", function () {
        
    })
    // 创建image任务
    gulp.task("image", function () {
        
    })

    //创建默认任务,默认任务正好是创建的html任务,运行gulp会自动执行默认任务
    gulp.task("default", ["html", "css", "js", "image"]);

第五步:给各个任务添加具体操作:获取文件-->输出文件

  • gulp.src方法含义:简单来说就是获取文件,要对哪一个文件进行操作。
  • gulp.pipe方法含义:gulp操作是基于的操作,我们把整个操作过程都当作一条水管,pipe方法类似于把每一步操作放到水管中。
  • gulp.dest方法含义:简单来说就是文件操作完了输出到哪里。
  • 一般我们会创建两个目录,一个是开发环境目录./src 一个是生产环境目录./dist。如果没有创建生产环境目录,gulp操作完成之后会自动创建目录,并且dist目录下输出的文集及目录也会按照输出的地址自动创建。
    //路径管理 以便后续文件路径更改操作
    var folder = {
        src: "src/",
        dist: "dist/"   //生产环境的目录,如果没有创建gulp操作会自动创建dist文件目录
    }
    // 创建html任务
    gulp.task("html", function () {
        gulp.src(folder.src + "html/*")             //获取html文件
            .pipe(gulp.dest(folder.dist + "html/")) //输出文件 
    })
    // 创建css任务
    gulp.task("css", function () {
        gulp.src(folder.src + "css/*")              //获取less文件
            .pipe(gulp.dest(folder.dist + "css/"))  //输出文件
    })
    // 创建js任务
    gulp.task("js", function () {
       gulp.src(folder.src + "js/*")                //获取js文件 
            pipe(gulp.dest(folder.dist + "js/"))    //输出文件
    })
    // 创建image任务
    gulp.task("image", function () {
        gulp.src(folder.src + "image/*")             //获取图片
            .pipe(gulp.dest(folder.dist + "image/")) //输出文件
    })

第六步:给各个任务添加具体操作:压缩文件,转换less,添加css前缀,去除js调试语句

  • 这一步骤需要gulp的插件支持,如何使用插件进行操作?
  • 插件使用的基本过程:下载插件 --> 取到插件 --> 应用插件
  • 下载插件
    $ npm install gulp-htmlclean    
    $ npm install gulp-imagemin
    $ npm install gulp-uglify
    $ npm install gulp-strip-debug
    $ npm install gulp-less
    $ npm install gulp-postcss autoprefixer
    $ npm install gulp-strip-debug
  • 获取插件
// 添加如下代码
// 压缩html
// 下载插件 gulp-htmlclean
var htmlClean = require('gulp-htmlclean');   //取到插件

// 压缩图片
// 下载插件 gulp-imagemin
var imageMin = require('gulp-imagemin');

// 压缩js
// 下载插件 gulp-uglify
var uglify = require('gulp-uglify');

// 去掉js中的调试语句
// 下载插件 gulp-strip-debug
var debug = require('gulp-strip-debug');

// 压缩css 
// 下载插件 gulp-clean-css
var cleanCss = require('gulp-clean-css')

// 给css添加前缀
// 下载插件 gulp-postcss  autoprefixer
var postcss = require('gulp-postcss')
var autoprefixer = require('autoprefixer')

// less转css
// 下载插件 gulp-less
var less = require('gulp-less');

  • 应用插件
    //更新之前的代码
    // 创建html任务
    gulp.task("html", function () {
        gulp.src(folder.src + "html/*")             //获取html文件
            .pipe(htmlClean())                      //压缩文件
            .pipe(gulp.dest(folder.dist + "html/")) //输出文件
    })
    // 创建css任务
    gulp.task("css", function () {
       gulp.src(folder.src + "css/*")               //获取less文件
            .pipe(less())                           //less转css
            .pipe(postcss([autoprefixer()]));       //添加前缀
            .pipe(cleanCss())                       //压缩css
            .pipe(gulp.dest(folder.dist + "css/"))  //输出文件
    })
    // 创建js任务
    gulp.task("js", function () {
        gulp.src(folder.src + "js/*")               //获取js文件 
            .pipe(debug())                          //清除调试语句
            .pipe(uglify())                         //压缩js文件
            .pipe(gulp.dest(folder.dist + "js/"))   //输出文件
    })
    // 创建image任务
    gulp.task("image", function () {
        gulp.src(folder.src + "image/*")            //获取图片
            .pipe(imageMin())                       //执行压缩插件
            .pipe(gulp.dest(folder.dist + "image/"))//输出文件
    })
  • 这样基本上该有的能力都有了,但还剩一个问题没解决

第七步:开启服务器代理和自动监听文件变化并刷新页面

  • 理清思路:gulp上开启服务器需要依赖插件,那么我们下载插件并获取到
    $ npm install gulp-connect
    // 开启服务器
    // 下载插件 gulp-connect
    var connect = require('gulp-connect')
  • 如何开启?需要创建开启服务器的任务"server"
    //开启服务器任务
    gulp.task('server', function () {
        connect.server({
            port: "8888",           // 设置端口号,不设置默认8080
            livereload: true        //开启刷新,什么时候刷新呢?需要在各个任务函数中设置
        });
    })
    gulp.task("default", ["html", "css", "js", "image", "server"]); //默认任务中也要添加服务器任务
  • 开启了服务器运行$ gulp就可以在http://localhost:8888/中查看我们的页面了。
  • 接下来是监听文件变化,同样的也需要创建监听任务
    // 创建监听任务
    gulp.task('watch', function () {
        gulp.watch(folder.src + 'html/*', ['html'])  //监听html文件,一旦文件变化就执行html任务
        gulp.watch(folder.src + 'css/*', ['css'])    //监听css文件
        gulp.watch(folder.src + 'js/*', ['js'])      //监听js文件
    })
    gulp.task("default", ["html", "css", "js", "image", "server", "watch"]); //默认任务中也要添加监听任务
  • 接下来是自动刷新,上面设置了自动刷新livereload: true,但是需要明确几点
    1. 开启监听任务并不能自动刷新页面,因为监听任务只监听变化,并不会帮助自动刷新页面。
    2. 自动刷新功能是开启了,但是什么时候自动刷新呢? 当然是在代码内容发生更改的时候自动刷新页面
    3. 所以我们在各个任务操作函数中进行添加自动刷新操作gulp.pipe(connect.reload())
    4. 拿html任务举例,其余任务类似
    //更新之前的代码
    gulp.task("html", function () {
        gulp.src(folder.src + "html/*") 
            .pipe(connect.reload());             //每次文件改变刷新页面
            .pipe(htmlClean())                   //压缩文件
            .pipe(gulp.dest(folder.dist + "html/"))  
    })

第八步:针对不同环境进行操作

  • 由于上面操作集合了开发环境和生产环境,不利于开发,下面将两者操作分开
  • 其实就是让开发阶段做开发的事,项目上线阶段做上线的事(压缩代码等操作)
  • 需要明确几点:
  • 如何设置当前的操作环境,比如我就想设置一下当前是在开发环境下,可以在命令行中执行:
   $ export NODE_ENV=development    # 同样的,生产环境是production
  • 那么如何判断当前处在什么环境呢?从而执行$ gulp进行不同环境下的任务操作
  • 有如下方法进行判断
    var devMode = process.env.NODE_ENV == "development"; //判断环境变量
  • 所以就可以在各个任务函数中判断当前所处环境,再进行不同操作,如下,以html任务为例,其他任务同理
    //更新之前的代码
    gulp.task("html", function () {
        var page = gulp.src(folder.src + "html/*")  
                        .pipe(connect.reload());     //每次文件改变刷新页面
        if (!devMode) {                              //如果是生产环境
            page.pipe(htmlClean())                   //压缩文件
        }
        page.pipe(gulp.dest(folder.dist + "html/"))  
    })
  • 这样整个项目利用gulp的简单构建就完成了。如果有错误欢迎指出,共同学习。以上都是本人手敲的,如果觉得不错不妨点个小心心

相关文章

  • gulp资源整理

    Gulp官网 Gulp中文网 Gulp插件网 博客: 前端构建工具gulpjs的使用介绍及技巧 - 无双 gulp...

  • 配置Gulp

    使用工具 Gulp说明 Gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器,基于node.js,...

  • 相关文章记录

    1.gulp构建工具相关信息 前端自动化构建工具gulp记录Gulp.js-livereload 不用F5了,实时...

  • 【前端工具】gulp构建工具的基本使用

    gulp是什么? gulp是前端开发中经常使用的自动化构建工具。自动化构建又是什么? 简单来说,一个完整的项目需要...

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

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

  • [译]Webpack前端构建集成方案

    构建工具逐渐成为前端工程必备的工具,Grunt、Gulp、Fis、Webpack等等,译者有幸使用过Fis、Gul...

  • 用自动化构建工具Gulp增强你的工作流程

    问:为什么要用在项目中使用前端自动化构建工具,gulp或其他等等。 答:先假设你没有使用这等前端自动化构建工具,你...

  • gulp入门教程

    gulp是前端的自动化构建工具,gulp的出现是希望能取代grunt,成为最流行的前端自动化构建工具,它与grun...

  • gulp && webpack

    gulp 前端自动化构建工具,此类的工具还有gruntwebpack 前端打包工具,打包:分析项目所依赖的内容,自...

  • Glup

    Gulp 前端构建工具,类似webpack。 方便使用 构建快速 插件系统 易于学习 扩展插件可以在npmjs上搜...

网友评论

    本文标题:【前端工具】gulp构建工具的基本使用

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