详解前端任务构建利器Gulp.js使用指南

概述

在软件开发中,任务运行器的好处是不言而喻的。它们可以帮助自动运行常见的冗长的任务,让你可以专注于更重要的事情中,比如敲出很棒的代码。说的严肃点,自动运行一些比如图片压缩、代码压缩、单元测试以及更多的任务的技能,简直就是节省时间的利器。

对于很多前端开发者而言,时下使用最多的任务管理器就是Grunt了,一个可以让你在Gruntfile.js文件中使用JavaScript定义各种运行任务的工具。基本上,只要你了解JavaScript,创建一个Grunt任务是非常简单直接的事情。丰富的第三方插件比如jsHint,Sass还有Uglify等等,让Grunt成为最易扩展的工具之一。

对于多数人来讲,一直以来都选择Grunt作为任务运行器。不过最近,因为易于安装,拥有更加易读和管理的超级简单的配置文件,一个叫Gulp.js的工具吸引了大批人的眼球。

安装Gulp.js

Gulp.js跟Grunt一样,都是基于Node的任务运行工具。所以你必须安装Node来运行它。有几种不同的方法可以安装Gulp,取决于你的操作系统。在OS X中,我用nvm,这是TimCaswell写的用于管理多个Node.js版本的很不错的脚本工具。你也可以直接从Node.js官方网站下载二进制文件。如果你对Node还一无所知的话,那我建议你最好去Nettuts+series先熟悉一下Node.js。

我们可以用npm(Node包管理器)来快速安装Gulp。打开你的终端然后输入:

npm install -g gulp

这条指令,从npm的注册机制中获取gulp并全局安装到你的系统中,以便你可以直接在命令行中访问它。

安装好了gulp,下面我们开始在项目中来使用它。

使用Gulp.js创建你的项目

要在项目中使用Gulp,必须完成下面关键几点:

  • 安装两个依赖包
  • 安装任何你想使用的插件
  • 创建Gulp.js文件然后定义你打算运行的任务

请在项目的路径下完成以上几点,这样Gulp才能使用你的配置文件。

首先,安装依赖包:

npm install --save-dev gulp gulp-util

现在我们需要安装在配置文件中定义好的用来运行指定任务的Gulp插件。这些插件都是Node包,所以我们再次使用npm来安装它们。

npm install --save-dev gulp-uglify gulp-concat

我这里安装两个插件,让我可以使用Uglify.js压缩器来精简/压缩JavaScript代码并且将多个JS文件合并到一个文件中去。

注意,我这里用的—save-dev,这个指令让我只在当前项目中安装Gulp依赖包跟插件。这么做可以在package.json中的devDependencies列表中为每个依赖项生成对应的词条标识。就像下面展示的:

{
  "devDependencies": {
    "gulp-util": "~2.2.13",
    "gulp": "~3.5.0",
    "gulp-uglify": "~0.2.0",
    "gulp-concat": "~2.1.7"
  }
}

这样可以确保使用npm为项目安装任何依赖包和插件。如果在项目中没有package.json文件,那在命令行输入npm init或者干脆在编辑器中手动创建一个,写好对应的卷括号,然后保存命名为”package.json”。在命令行中输入npm指令来更新它。请注意,必须要使用卷括号,不然,当你试图使用—save-dev时,npm会抛出一个错误显示它不是一个合法的JSON文件。

虽然在本篇指南中我只用了两个插件,不过Gulp提供了超过200个插件来满足不同的功能需求,包括:

  • LiveReload(gulp-livereload)
  • JSHint(gulp-jshint)
  • Sass(gulp-sass)
  • CoffeeScript file compilation(gulp-coffee)

还有好多好多···

Gulpfile.js文件

跟Grunt一样,Gulp有一个叫做gulpfile.js的同名配置文件,里面定义了运行任务的所有的必须的插件。你要在项目的根目录下创建这个文件。

简单直白的语法,让gulp文件非常易读能懂:

var gulp    = require('gulp'),
gutil    = require('gulp-util'),
uglify  = require('gulp-uglify'),
concat  = require('gulp-concat');

上面代码简单告诉gulp需要引用哪些插件来完成既定的任务。

下一步,我们需要定义Gulp运行的任务。我这里,定义两个:

  • 压缩图片
  • 精简JS文件

我们使用Gulp的方法task()来定义要运行的任务:

gulp.task('js', function () {
    gulp.src('./js/*.js')
        .pipe(uglify())
        .pipe(concat('all.js'))
        .pipe(gulp.dest('./js'));
});

看看上面的代码,用的是引用的插件组成的一个混合方法调用。第一个方法task(),使用一个名称代表当前任务(这里就叫'js'),还有一个匿名方法囊括了实际的操作。我们来拆解一下代码:

gulp.src('./js/*.js')

src()方法指定了要从哪里找到需要压缩的JS文件,并且将其转换成包含文档结构的数据流以传入后续运行的插件中。这是Node.jsStreams API中的一部分,也正是Gulp拥有简明API语法的原因之一。

.pipe(uglify())

pipe()方法从src()方法中获得传过来的数据流,然后传入指定的插件中。在当前例子中,插件uglify将接收数据流。

.pipe(concat('all.js'))

像uglify一样,插件concat通过pipe()接收传过来的数据流,然后将多个JS文件合并到'all.js'中。

.pipe(gulp.dest('./js'));

最后,使用Gulp的dest()方法,将all.js写到指定目录中,整个过程简介易读。

还有最后一个我们要做的事情,就是更改Gulp的默认运行任务为”js”。

gulp.task('default', function(){
    gulp.run('js');
});

返回到命令行,输入'gulp',Gulp找到了gulpfile.js文件,加载所有的依赖项跟插件,运行默认任务'js'。你可以在最后的运行结果,文件被压缩合并了

让我们更近一步吧。Gulp提供了另外一个方法叫watch(),它可以监视指定的资源变更。跟手动输入'gulp'运行任务不同,这个方法允许根据资源的改变自动运行任务。

gulp.watch('./js/*', function () {
     gulp.run('js');
});

当上面的代码运行的时候,Gulp会继续保持对指定资源的监视,一旦资源发生变更,就会再次运行'js'方法。这个功能很棒!

向Gulp.js过渡

当我刚听说Gulp的时候,我第一反应就是“又一个超棒的工具!”。Gulp.js确实拥有着吸引人的语法跟API,它让构建任务变得轻而易举。尽管插件没有Grunt丰富,但是它的插件库看起来已经在日趋增长,特别是现在拥有着对它感兴趣的这么多的开发者。

以上就是详解前端任务构建利器Gulp.js使用指南的详细内容,更多关于Gulp.js使用指南的资料请关注我们其它相关文章!

(0)

相关推荐

  • vscode+gulp轻松开发小程序的完整步骤

    利用 gulp+vscode 来开发小程序的一个小工具,内置扩展了一系列的 wx 全局api方法,支持自定义配置相对应的信息和别名等问题 安装方法: # 全局安装 npm install -g wechat-mini-gulp # 当前小程序根目录下运行 wechat-gulp run init # 安装依赖 npm install 运行 #开发环境 npm run gulpdev #正式环境 npm run gulpbuild # 测试环境 npm run gulptest # 清空conso

  • angular1配合gulp和bower的使用教程

    一 安装gulp和bower gulp安装: npm install -g gulp bower安装: npm install -g bower ==注:== angularjs的一些包文件我们是通过bower来管理的 二 bower使用 使用bower初始化一个项目: bower init 填写工程名,描述等等那些东西 安装angularjs:bower install --save angular 创建.bowerrc文件(注意window最好用命令行创建) 三 自动化工具gulp的使用 初

  • 使用webpack/gulp构建TypeScript项目的方法示例

    总体来看,TypeScript项目构建主要分两步: 将ts 项目整体转换为js项目 按常规套路,对该 js 项目进行打包构建 构建过程中,对 ts 文件的转换不再使用命令行方式,所以 tsc 的配置参数,需要通过 tsconfig.json 文件设置. 初始化 tsconfig.json tsc --init 之后,我们会在项目目录中得到一个完整冗长的 tsconfig.json 配置文件.这个文件暂且不必改动. { "compilerOptions": { /* Basic Opti

  • Bootstrap4 gulp 配置详解

    最近想写个项目,由于之前一直写后端,很少接触前端,所以这次来好好学一下前端.看了下Yii框架,它自带了Bootstrap框架,最开始想的是怎么快速写个页面,哪知道这个就像剥洋葱一样,就剥到了学习构建工具的阶段. 说个很沮丧的消息,等我把gulp这套工具调通了后,发现Github上居然有很多这样的模板了!废了我3天时间来搞这个东西.给个关键词:bootstrap 4 gulp boilerplate.额,以及还有一个网站,这是我读完bootstrap的文档后发现的:https://vanillaj

  • 写gulp遇到的ES6问题详解

    前言 Gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务.最近复习一下gulp一些基本的写法,在写了一些简单的uglify,rename,concat,clean的处理之后,发现都还记得这些基本语法.然后无意间就想在demo中写下export function会变成怎样,结果发现gulp并不支持直接的es6语法,而且提示的错误也让人模棱两可. events.js:182 throw er; // Unhandled 'error' event ^ GulpUg

  • angularjs使用gulp-uglify压缩后执行报错的解决方法

    问题出现原因是由于压缩之后变量变成了,e.s.t等,需要依赖注入的方法没有使用中括号注入,而在function的参数中直接使用,导致压缩之后无法识别需要依赖注入的模块.例如: var module= angular.module('homeApp', ['ui.router']); module.config(function ($sceProvider) { $sceProvider.enabled(false); }) 改为: var module= angular.module('home

  • gulp构建小程序的方法步骤

    目前来说,对于构建小程序的,类似taro这些框架,生态已经挺完善的了,没有什么必要再搞一套来折腾自己.但是,我司的小程序,是很早之前就开发的,我们负责人当时信不过这些开源的框架,于是自己用webpack搞了一套框架,但有一个比较严重的问题,有一些文件依赖重复打包了,导致小程序包体积比较大. 持续了一个多月,主包体积在2M左右徘徊,开发都很难做下去.我们负责人终于受不了了,给了我个任务,让我写一个构建小程序的工具,减少小程序包体积. 我们现在的框架对比一下原生小程序,其实差别不大,无非就是 ts

  • nodejs用gulp管理前端文件方法

    1.安装node.js(https://nodejs.org/en/) 安装后使用node -v查看版本 node安装完之后会顺带安装npm ps:npm其实是Node.js的包管理工具(package manager)为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码.如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐.于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上

  • Laravel利用gulp如何构建前端资源详解

    什么是gulp? gulp是新一代的前端项目构建工具,你可以使用gulp及其插件对你的项目代码(less,sass)进行编译,还可以压缩你的js和css代码,甚至压缩你的图片,gulp仅有少量的API,所以非常容易学习. gulp 使用 stream 方式处理内容.Node催生了一批自动化工具,像Bower,Yeoman,Grunt等. gulp和grunt的异同点 易于使用:采用代码优于配置策略,Gulp让简单的事情继续简单,复杂的任务变得可管理. 高效:通过利用Node.js强大的流,不需要

  • 使用gulp构建前端自动化的方法示例

    gulp是一个自动化构建工具,开发者可以用它来自动执行一些常见的任务.这里以我之前做的一个demo为例,简要介绍如何使用gulp实现前端工程自动化. 项目结构 其中src目录下表示的是项目的源代码,可以看到其中有less.js.html等,而dist目录则是保存的是gulp编译后生成的代码,相当于生产环境.最后也最重要的是gulpfile.js,这个文件用于设置gulp相关的配置,类似于webpack中的webpack.config.js. 安装 这里使用的gulp为v3.9.1,语法和最新的v

随机推荐