摘要:简而言之,任何符合匹配规则的文件发生改变就会运行任务列表中的任务。第二种形式的参数是一个匹配规则,可选的选项对象,和一个可选的回调函数。当事件发生时会运行该回调函数。它获取任何或其子目录下的文件,因此,同样会应用于该任务。
参考
Preface原文地址: https://scotch.io/tutorials/a...
源码Github地址:https://github.com/scotch-io/...
前端的世界越来越丰富,各种新鲜工具层出不穷。然而,人生却还是越来越寂寞。年纪越小的时候,越容易交到朋友,或者说越容易玩到一起。到了现在,往往是路不同不相谋,表面酒肉知己。如今webpack可以说是非常火热的构建工具,gulp的许多功能它都可以完成。不过,还是有很多场景使用Gulp即可完成。所以,技术要选合适的,路要走自己的。
正文:Automate Your Tasks Easily with Gulp.js作为开发人员,我们经常需要查看我们所使用的工具,并决定该工具是否适合当前工作。Chris在去年写了一个很棒的工具 —— Grunt 。但是Grunt并不一定是你的最佳选择。
Gulp 是一个流式构建系统,通过使用node流将文件操作全部在内存中完成,而且文件在接受到您的命令前不会写入。
像Grunt一样,Gulp是一个javascript任务运行器(task runner)。然而,Gulp更喜欢代码配置。由于您的任务在代码中编写,所以Gulp更像是一个构建框架(build framework),提供了一个根据特定需求创建任务的工具。
➻ 安装Gulp的安装和运行非常简单,只需要如下步骤:
全局安装
作为开发依赖安装
创建一个gulpfile.js文件
第一步,全局安装Gulp。
$ npm install --global gulp
然后,您需要将gulp设为项目的开发依赖模块。确保您已经有package.json文件或者命令行运行npm init,然后就可以用下面的命令将其安装为项目开发依赖模块:
$ npm install --save-dev gulp
最后,您需要在项目的根目录创建gulpfile.js文件,其中包含着你的任务。作为中间步骤,我们将添加gulp util插件,以便我们有一个可以显示执行情况的可运行任务。
$ npm install --save-dev gulp-util
在刚才创建的gulpfile.js中,我们将写一个非常简单的任务来打印一行字符串。
/* File: gulpfile.js */ // grab our gulp packages var gulp = require("gulp"); var gutil = require("gulp-util"); // create a default task and just log a message gulp.task("default", function () { return gutil.log("Gulp is running"); });
现在执行gulp命令,如果一切正常的话,将会有如下的输出:
> gulp [12:32:08] Using gulpfile ~/Projects/gulp-scotch-io/gulpfile.js [12:32:08] Starting "default"... [12:32:08] Gulp is running! [12:32:08] Finished "default" after 1 ms➻ Overview 本教程的目录结构
我们可能需要先花一些时间定义一下项目结构。在此示例中,我们将使用下面的结构,你可以先将文件内容空着。
public/ | assets/ | | stylesheets/ | | | style.css | | javascript/ | | | vendor/ | | | | jquery.min.js | | | bundle.js source/ | javascript/ | | courage.js | | wisdom.js | | power.js | scss/ | | styles.scss | | grid.scss gulpfile.js packages.json
source是我们的工作目录。assets/style.css会在我们使用gulp处理和组合source/scss中的SASS文件时创建。bundle.js文件会在我们使用gulp压缩和组合JS文件时创建。
gulp 简述Gulp是一个流式构建系统。它的流特性允许它管理和传递被操作的数据或插件使用的数据。插件旨在每次只做一个工作,所以通过一个多个插件传递一个单一的文件并不罕见。
gulp的api非常简洁轻量,包含4个顶级函数。如下所示:
gulp.task
gulp.src
gulp.dest
gulp.watch
gulp.task方法定义你的任务。它的参数是name,deps和fn。
name是一个字符串,deps是一个包含任务名称的数组,fn是执行任务的一个函数。deps是可选的,所以gulp.task有两种形式:
gulp.task("mytask", function () { // do stuff }); gulp.task("dependenttask", ["task"], function () { // do stuff after "mytask" is done })
gulp.src指向我们要使用的文件。它的参数是一个匹配规则和一个可选的选项对象。它使用.pipe方法将其输出链接到其他插件。
gulp.dest指向我们想要文件输出的位置。
我们可以使用gulp.src和gulp.dest进行简单的文件复制操作:
gulp.task("copyHtml", function () { // copy any html files in source/ to public/ gulp.src("source/*.html").pipe(gulp(.dest("public"))); });
gulp.watch像gulp.task一样有两种形式。它们都返回一个EventEmitter并触发change事件。第一种形式的参数是一个匹配规则,一个可选的选项对象,和一个任务数组。
gulp.watch("source/javascript/**/*.js", ["jshint"]);
简而言之,任何符合匹配规则的文件发生改变就会运行任务列表中的任务。如上面的代码,只要任何source/javascript子文件夹下的.js文件发生了改变,就会对这些文件运行jshint任务。
第二种形式的参数是一个匹配规则,可选的选项对象,和一个可选的回调函数。当change事件发生时会运行该回调函数。
你可以将它与Grunt比较,Grunt需要安装其他的包才能实现watch功能。而Gulp原生支持。
更多Gulp的资料请参考api docs。
➻ Tasks that are actually usefulBeing able to tell us that it is running is a fine task, but lets get gulp to do some real tasks for us.
We"ll start with simple tasks and work our way up.
➻ jshint 检查代码我们的第一个任务是使用jshint检查javascript代码,我们将会设置在每次保存javascript文件时运行该任务。
首先我们需要通过npm来安装gulp-jshint模块。我们还需要一个jshint的报告工具,使输出格式化并添加颜色。输入如下命令安装这两个模块:
$ npm install --save-dev gulp-jshint jshint-stylish
现在将该任务添加到gulpfile。
/* File: gulpfile.js */ // grab our package var gulp = require("gulp"); var jshint = require("gulp-jshint"); // define the default task and add the watch task to it gulp.task("default", ["watch"]); // configure the jshint task gulp.task("jshint", function () { return gulp.src("source/javascript/**/*.js") .pipe(jshint()) .pipe(jshint.reporter("jshint-stylish")); }); // configure which files to watch and what tasks to use on file changes gulp.task("watch", function () { gulp.watch("source/javascript/**/*.js", ["jshint"]); });
看看我们做了哪些修改。
我们将watch任务添加为default任务的依赖,所以当我们运行:
$ gulp
也将会运行watch任务。
现在看看新的jshint任务。它获取任何source/javascript或其子目录下的.js文件,因此,source/javascript/carousel/main.js同样会应用于该任务。这些文件将会传递给gulp-jshint插件,然后再传递给stylish reporter,给我们展示jshint检查代码的结果。
我们可以这样运行该任务:
$ gulp jshint
非常简单!
OK,那么后面的watch任务呢。其实也很简单,如果检测到任何js文件有改动,就会运行jshint任务。
➻ 使用libsass编译Sass文件Sass作为CSS的扩展,支持变量,嵌套规则,混合,内联导入等。
Ken Wheeler has already done an awesome write up on Sass that you can find here.
为了编译Sass,我们需要使用gulp-sass。
NOTE: gulp-sass uses node-sass which in turn uses libsass. On windows you"ll need to install python 2.7.x and Visual Studio Express 2013 in order to compile libsass. Mac and Linux will use whatever gcc is available.
An alternative is to use gulp-ruby-sass, which uses ruby and the sass gem instead.
/* file: gulpfile.js */ var gulp = require("gulp"), jshint = require("gulp-jshint"), sass = require("gulp-sass"); /* jshint task would be here */ gulp.task("build-css", function () { return gulp.src("source/scss/**/*.scss") .pipe(sass()) .pipe(gulp.dest("public/assets/stylesheets")); }); /* updated watch task to include sass */ gulp.task("watch", function () { gulp.watch("source/javascript/**/*.js", ["jshint"]); gulp.watch("source/scss/**/*.scss", ["build-css"]); });
我们可以使用gulp-sourcemaps添加sourcemaps。sourcemap是非常棒的功能,如果你从未使用过可以体验一下了。它可以将处理压缩或修改过的文件映射到源文件。
A list of the plugins that support gulp-sourcemaps can be found here.
/* file: gulpfile.js */ var gulp = require("gulp"), jshint = require("gulp-jshint"), sass = require("gulp-sass"), sourcemaps = require("gulp-sourcemaps"); gulp.task("build-css", function() { return gulp.src("source/scss/**/*.scss") .pipe(sourcemaps.init()) // Process the original sources .pipe(sass()) .pipe(sourcemaps.write()) // Add the map to modified source. .pipe(gulp.dest("public/assets/stylesheets")); });➻ Javascript合并与压缩
在使用大量的JavaScript时,通常需要将它们整合在一起。通用插件gulp-concat可以轻松完成这个任务。
我们还可以更进一步,通过使用uglify工具以获得更小的文件体积。
另外,我们将根据是否在生产环境来判断是否使用uglify。
gulp.task("build-js", function() { return gulp.src("source/javascript/**/*.js") .pipe(sourcemaps.init()) .pipe(concat("bundle.js")) //only uglify if gulp is ran with "--type production" .pipe(gutil.env.type === "production" ? uglify() : gutil.noop()) .pipe(sourcemaps.write()) .pipe(gulp.dest("public/assets/javascript")); });➻ 总结
我们只是了解了gulp的表面。Gulp可以根据您的需要变的复杂或者简单,您可以通过代码配置让它完成任何任务。
从简单如合并JavaScript文件,到自动化部署到S3 bucket。Gulp就是这样一个可以帮助您简单、快速完成任务的工具。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89392.html
摘要:的使用首先,我们需要在官网下载插件,地址如下在这个网站我们可以寻找到自己需要的插件以为例,然后在项目下打开命令提示行,输入以下命令然后我们在里输入一下代码引入插件调用插件输出位置 gulp的入门与使用 安装 使用 gulp的入门 安装 安装gulp需要使用到nodo.js,安装链接如下:http://jingyan.baidu.com/arti... 安装完成之后我们以全局安装gu...
摘要:所以出现了各种前端构建化工具也应运而生等已经成为现在前端开发工程师的必备技能之一。结语今天的分享就告一段落啦希望能对大家有所帮助。 在互联网告诉发展的今天,自node出现后,我们前端也越来越大(心里美美哒~),同样带来的Web业务日益复杂化和多元化,模式也都想webPage模式转向webApp模式,拼几个页面搞几个jquery的插件就能搞一个完成一个项目的日子已经是很久远的曾经了,而且...
阅读 2784·2021-09-01 10:30
阅读 1679·2019-08-30 15:52
阅读 964·2019-08-29 18:40
阅读 1115·2019-08-28 18:30
阅读 2391·2019-08-23 17:19
阅读 1321·2019-08-23 16:25
阅读 2699·2019-08-23 16:18
阅读 2977·2019-08-23 13:53