资讯专栏INFORMATION COLUMN

用gulp构建一个简单常用的的环境

Shimmer / 3196人阅读

摘要:简单做点通俗的讲解。如果你想要创建一个序列化的队列,并以特定的顺序执行,嗯,戳文档文档。自然是表示任意,全部。到这里,其实就是一个小规模的调试环境,接下来,让我们升级一下,开始构造简单的发布环境压缩采用的是插件。做一个的就好,只需要。

gulp作为一个自动化构建工具,在前端开发中大大的提高了开发效率,前端开发者们可以利用他减少许多繁复无脑的操作。
这里简单构建一个小环境,就可以在以后的学习中,直接新建各种test.html测试我们新学习的知识点啦~
【看不明白的,有疏漏的,欢迎指出,我更改措辞或者bug】

入门安装

入门就不讲了,会用npm的同学应该都清楚,这里贴一个既有的官方指南。gulp入门指南

一些小基础

详细的配置我就不讲了,api文档戳进去看。简单做点通俗的讲解。

gulp.task(name[, deps], fn)

gulp是由每个小task组成的,我们可以类似函数一样,把我们需要的一个个小功能以各种task分开写,然后可以在cmd里使用gulp 方式来执行。

当然任务多了,我们就需要一键执行所有操作,所以一般情况下,我们只运行 gulp 命令,则会执行所注册的名为 default 的 task,然后在default这个任务后面,添加我们写好的其它task名的数组,则会挨个执行我们写好的各种task。不然只执行function。
如果没有default这个 task,那么gulp命令会报错。

gulp.task("default", function() {
  // 将你的默认的任务代码放在这
});

注意: 默认的,task 将以最大的并发数执行,也就是说,gulp 会一次性运行所有的 task 并且不做任何等待。如果你想要创建一个序列化的 task 队列,并以特定的顺序执行,嗯,戳文档api文档。

gulp.src(globs[, options])

其实说白了就是匹配我们要处理的文件,src就是路径。

gulp.src("client/templates/*.jade")

*自然是表示任意,全部。
glob 请参考 node-glob 语法 或者,你也可以直接写文件的路径。

gulp.pipe

其实就是把src匹配到的文件传递到后面来执行。括号里就是我们要进行的各种操作。

有点类似js语法,不难理解,用.接起来,一步步执行。
一般我们会一行行写,可读性好点,写一行不友好。

gulp.src("client/templates/*.jade")
  .pipe(jade())
  .pipe(minify())
  .pipe(gulp.dest("build/minified_templates"));
gulp.dest(path[, options])

生成处理好的文件。
你可以将它 pipe 到多个文件夹。如果某文件夹不存在,将会自动创建它。

gulp.src("./client/templates/*.jade")
  .pipe(jade())
  .pipe(gulp.dest("./build/templates"))
  .pipe(minify())
  .pipe(gulp.dest("./build/minified_templates"));
gulp.watch(glob[, opts], tasks)

监视文件,并且可以在文件发生改动时候做一些事情。

gulp.watch(glob [, opts], tasks) 
或
gulp.watch(glob [, opts, cb])

需要在文件变动后执行的一个或者多个通过 gulp.task() 创建的 task 的名字,

var watcher = gulp.watch("js/**/*.js", ["uglify","reload"]);
watcher.on("change", function(event) {
  console.log("File " + event.path + " was " + event.type + ", running tasks...");
});

也可以直接执行function,一样的。

gulp.watch("js/**/*.js", function(event) {
  console.log("File " + event.path + " was " + event.type + ", running tasks...");
});

gulp的很多操作都是用插件执行的,当然,详细操作自然是每个插件看作者文档了!而且同一个功能的插件也层出不穷,大家可以根据需要自行选择。好了,开始我们的构建,注意,提到的每一个插件都要npm安装

注意:每一个插件都存在可配置的空间,所以关于最大化利用好每个插件,也是参照文档来的,这里我们取一些通用配置,具体视项目情况而定。

开服务,自动刷新

无可厚非,代码实时保存,浏览器实时刷新,是前端最想要的功能,手动刷新浏览器相信是每一个前端新手要吐的操作。

开服务

采用gulp-connect插件。
根目录下开启服务,端口号为2323,开启实时刷新,局域网内可用。

var connect = require("gulp-connect");
var serverConfig = {
root: "./",
port: 2323,
livereload: true,
host: "::"
}
gulp.task("server",function(){
    connect.server(serverConfig);
});
配置自动刷新

采用gulp-livereload。
开启刷新,监听html变化,并实时刷新。

var livereload = require("gulp-livereload")
gulp.task("watch", function () {
    livereload.listen();
    gulp.watch(["*.html"],function(event){
        livereload.changed(event.path);
    })
});

其实到这里,一个微型的服务就搭建起来了,最后别忘了最根本的一句

var gulp = require("gulp");

不然是起不来的。
为了简便,可以在gulpfiles.js里添加一行,

gulp.task("default",["server","watch"]);

直接运行gulp就好,让他们依次执行。

到这里,其实就是一个小规模的调试环境,接下来,让我们升级一下,开始构造简单的发布环境

压缩html

采用的是gulp-htmlmin插件。
抽取src目录下的所有html文件,导入到htmlmin插件进行处理,并将结果输出到public目录,最后重新刷新已开启的服务。

var htmlmin = require("gulp-htmlmin");
gulp.task("html", function(){
    gulp.src("src/*.html")
        .pipe(htmlmin({
            collapseWhitespace: true,
              removeComments: true
        }))
        .pipe(gulp.dest("public"))
        .pipe(connect.reload());
});
压缩js

采用的是gulp-uglify插件,但同时,我们也用到了另一个插件gulp-concat,这个是用来连接各个文件组成一个文件。
抽取src/js下的所有js文件,将其合并,然后压缩,输出到public/js目录,最后服务重载。

var uglify = require("gulp-uglify");
var concat = require("gulp-concat");
gulp.task("script",function(){
    gulp.src("src/js/*.js")
        .pipe(concat("main.js"))
        .pipe(uglify({mangle:false}))
        .pipe(gulp.dest("public/js"))
    .pipe(connect.reload());
});
压缩css

采用的是gulp-cssnano插件。类似js,不解释了。

var cssnano = require("gulp-cssnano");
gulp.task("css",function(){
gulp.src("src/css/*.css")
    .pipe(concat("animate.css"))
    .pipe(cssnano())
    .pipe(gulp.dest("public/css"))
    .pipe(connect.reload());
})
压缩图片

采取的是gulp-smushit插件,类似js,不解释。

var smushit = require("gulp-smushit");
gulp.task("imagemin",function(){
    gulp.src(["src/images/*.png","src/images/*.jpg"])
        .pipe(smushit({
            verbose:true
        }))
        .pipe(gulp.dest("public/images"))
        .pipe(connect.reload());
});
gulp-watch监听文件变动,自动重载

这个gulp-watch在前面有讲到,其实就是开启监听,并重新执行各个html
,js,css,imagemin压缩任务。
相信大家对比前面的gulp-livereload能够看的出来,这里两者是有冲突的,一个只是调试下刷新页面,一个却每次都要压缩。
所以其实实际项目中是不会把压缩任务配置到watch里,会造成资源浪费,你每保存一次,就会压缩。只会在最后调试完成,执行压缩一次。

gulp.task("watch", function () {
  gulp.watch(["src/*.html"], ["html"]);
  gulp.watch(["src/js/*.js"], ["script"]);
  gulp.watch(["src/css/*.css"], ["css"]);
  gulp.watch(["src/images/*.*"], ["imagemin"]);
});

做一个min的task就好,只需要gulp min

gulp.task("min",["html","script","css","imagemin"]);

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95004.html

相关文章

  • 使 Gulp 自动化构建工具快速搭建项目

    摘要:通过本文,我们将学习如何使用来改变开发流程,从而使开发更加快速高效。中文网站详细入门教程使用是基于的,需要要安装为了确保依赖环境正确,我们先执行几个简单的命令检查。详尽使用参见官方文档,中文文档项目地址 为了UED前端团队更好的协作开发同时提高项目编码质量,我们需要将Web前端使用工程化方式构建; 目前需要一些简单的功能: 1. 压缩HTML 2. 检查JS 3. 编译SA...

    glumes 评论0 收藏0
  • gulp和webpack入门介绍

    摘要:介绍说明的包管理器,用于插件管理包括安装卸载管理依赖等使用安装插件命令提示符执行插件名称。总结安装新建文件全局和本地安装安装插件新建文件通过命令提示符运行任务。 showImg(https://segmentfault.com/img/remote/1460000010873466); 前言 众所周知目前比较火的工具就是gulp和webpack,但webpack和gulp却有所不同,本...

    hsluoyz 评论0 收藏0
  • 带你了解webpack

    摘要:根据依赖关系,按照配置文件把模块函数分组打包成若干个。会随着自身的的修改,而发生变化。只需要在命令行运行时带上参数就搞定一些插件的废除和替换废弃了顶替者用属性变化压缩优化代码分割,下面详解还有一些新的插件,。 1. 前端工程化项目打包历史 前端工程化之前的时代略过 1. 半自动执行脚本来压缩合并文件 自从xmlhttprequest被挖掘出来,网页能够和服务端通讯,js能做的事越来越多...

    senntyou 评论0 收藏0
  • 带你了解webpack

    摘要:根据依赖关系,按照配置文件把模块函数分组打包成若干个。会随着自身的的修改,而发生变化。只需要在命令行运行时带上参数就搞定一些插件的废除和替换废弃了顶替者用属性变化压缩优化代码分割,下面详解还有一些新的插件,。 1. 前端工程化项目打包历史 前端工程化之前的时代略过 1. 半自动执行脚本来压缩合并文件 自从xmlhttprequest被挖掘出来,网页能够和服务端通讯,js能做的事越来越多...

    Tamic 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<