gulp使用实例分析——yo angular的自动化任务分析

如果你了解gulp的使用方法,那么你需要一个实战的例子来帮你加深理解。

这里将会手把手教你如何搭建一个工作流,类似yo angular这样的gulpfile.js
 
---------------------------------------------------分析需求
  • 我们会使用多个第三方的插件,并使用bower来嵌入
  • 我们需要对样式文件进行解析,使用sass编译
  • 我们要对依赖的css,js进行整合打包,并对文件hash命名,例如vendor-65b6dbc7a5.css
  • 我们要对html进行注入压缩
  • 开发的过程我们需要能实时预览(preview)
 
--------------------------------------------环境搭建以及需要的插件
nodejs环境
安装gulp
安装gulp插件
gulp-connect : 创建一个webserver 方便实时预览
gulp-autoprefixer:css自动添加前缀,以适应多浏览器
gulp-cache:gulp的文件缓存服务,尤其是任务处理过程中的中间文件特别有效
gulp-filter:文件匹配神器
gulp-imagemin:图片压缩神器
gulp-jshint:js语法检测
gulp-load-plugins:gulp插件自动加载神器,使用起来叼叼的!一个字,方便!
gulp-plumber:修复了pipe处理异常的bug,让任务执行更平滑
gulp-minify-css:压缩css的神器
gulp-rev:校订命名神器,将文件名附加文件内容hash后的重新命名,对于发布新版本静态资源的时候有效解决浏览器缓存问题
gulp-rev-replace:重写被rev命名后的文件索引,尤其是你使用了manifest离线缓存后这个非常有效
gulp-uglify:js压缩神器
gulp-useref:处理html中js或css占位符替换成真正的资源索引
gulp-util:这是gulp执行的界面工具,方便你输出执行过程中的信息(log)
gulp-watch:监听文件变化,并执行默认更新任务
wiredep:bower插件的依赖插入神器
lazypipe:pipe可复用的强大神器
gulp-sass:sass文件编译
open:主动打开某个网址,在编译预览时,方便!
jshint-stylish:js语法检测的格式化输出
rimraf:文件以及文件夹的操作
run-sequence:按顺序执行gulp任务,这是个过渡版本,预期以后gulp会增强相关的功能
 
--------------------------------------------------------------
开始编写gulpfile.js
 
 
我们当前的目录结构是:
--app
--package.json
--gulpfile.js
 
app中就是我们编写app的区域,我们所有gulp任务都是针对该文件夹处理的
 
============================定义加载的插件
加载gulp,以及gulp的插件(以gulp-开头所有的插件),和其他相关插件
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
var openURL = require('open');
var lazypipe = require('lazypipe');
var rimraf = require('rimraf');
var wiredep = require('wiredep').stream;
var runSequence = require('run-sequence');
 
=============================定义全局路径
这里app就是我们源文件夹,dist是我们要打包输出的文件夹
var workflow = {
  app: 'app',
  dist: 'dist'
};
 
定义css,js路径以及视图路径
var paths = {
  scripts: [workflow.app + '/scripts/**/*.js'],
  styles: [workflow.app + '/styles/**/*.scss'],
  views: {      
    main: workflow.app + '/index.html',
    files: [workflow.app + '/views/**/*.html']
  }
};
 
==========================定义可复用的pipe
lintScripts预设了js语法检测的参数设置,以及语法检测日志的输出使用jshint-stylish
styles预设了css样式处理的过程,使用sass编译,使用autoprefixer自动添加前缀,并指定了输出的文件夹
var lintScripts = lazypipe()
  .pipe($.jshint, '.jshintrc')
  .pipe($.jshint.reporter, 'jshint-stylish');
 
var styles = lazypipe()
  .pipe($.sass, {
    outputStyle: 'expanded',
    precision: 10
  })
  .pipe($.autoprefixer, 'last 1 version')
  .pipe(gulp.dest, '.tmp/styles');
 
 
============================开始编写任务
styles任务将我们的样式文件按照上述预制的styles执行
gulp.task('styles', function () {
  return gulp.src(paths.styles)
    .pipe(styles());
});
lint:scripts任务负责检测我们的js语法的合法性
gulp.task('lint:scripts', function () {
  return gulp.src(paths.scripts)
    .pipe(lintScripts());
});
clean:tmp任务负责清理.tmp文件夹,注意这里有了一个cb回调,意味着其他任务需要等待该任务执行完成后才能执行
gulp.task('clean:tmp', function (cb) {
  rimraf('./.tmp', cb);
});
 
启动客户端,调用启动服务器,格式化样式,并在浏览器中打开指定网址
gulp.task('start:client', ['start:server', 'styles'], function () {
  openURL('http://localhost:9000');
});
 
启动服务器,使用connect创建一个webserver
gulp.task('start:server', function() {
  $.connect.server({
    root: [yeoman.app, '.tmp'],
    livereload: true,
    hostname: 'localhost',
    // Change this to '0.0.0.0' to access the server from outside.
    port: 9000
  });
});
 
添加监听任务,并执行相关的任务
gulp.task('watch', function () {
  $.watch(paths.styles)
    .pipe($.plumber())
    .pipe(styles())
    .pipe($.connect.reload());
 
  $.watch(paths.views.files)
    .pipe($.plumber())
    .pipe($.connect.reload());
 
  $.watch(paths.scripts)
    .pipe($.plumber())
    .pipe(lintScripts())
    .pipe($.connect.reload());
 
  $.watch(paths.test)
    .pipe($.plumber())
    .pipe(lintScripts());
 
  gulp.watch('bower.json', ['bower']);
});
 
编译启动服务器,注册了一个按序执行的任务列表,清除.tmp, 检测js语法,启动客户端(启动webserver,编译样式css),添加监听任务
gulp.task('serve', function (cb) {
  runSequence('clean:tmp',
    ['lint:scripts'],
    ['start:client'],
    'watch', cb);
});
 
bower任务负责将bower依赖注入
gulp.task('bower', function () {
  return gulp.src(paths.views.main)
    .pipe(wiredep({
      directory: workflow.app + '/bower_components',
      ignorePath: '..'
    }))
  .pipe(gulp.dest(workflow.app));
});

 

转载于:https://www.cnblogs.com/kmweb/p/6497531.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Gulp是一种前端自动化工具,它可以帮助前端开发人员自动完成一些重复性工作,例如压缩CSS和JavaScript文件、自动刷新浏览器、合并文件等。 使用Gulp需要先安装Node.js和npm,然后使用npm安装Gulp。安装完成后,可以在项目的根目录下创建一个名为gulpfile.js的文件,该文件中定义了Gulp要执行的任务和任务的具体操作。 在gulpfile.js中,可以使用Gulp提供的API来定义任务。例如,可以使用gulp.task()方法定义一个任务,该方法接受两个参数:任务的名称和任务要执行的操作。可以使用gulp.src()方法指定要处理的文件,然后使用各种Gulp插件来执行各种操作,例如gulp-concat用于合并文件,gulp-uglify用于压缩JavaScript文件等。 最后,可以使用gulp.dest()方法将处理后的文件保存到指定目录。定义好任务后,可以在终端中使用gulp命令来执行任务,Gulp会自动执行任务并输出相关日志信息。 ### 回答2: Gulp是一个前端自动化工具,它通过编写简洁、易于理解的代码来帮助开发者自动化前端开发中的各种任务。 首先,Gulp使用简单且灵活。它使用流的概念,让开发者能够通过将任务连接在一起构建整个开发流程。开发者可以定义各种任务,如压缩文件、合并文件、编译代码等等,然后通过管道将这些任务链接在一起。这种方式使得构建前端项目变得非常容易,同时也让开发者能够根据自己的需求定制任务流程。 其次,Gulp有大量的插件可供选择。Gulp的插件系统非常强大,社区中有数以千计的插件可用。这些插件可以帮助开发者解决各种问题,如自动添加浏览器前缀、压缩文件、优化图片等等。开发者可以根据自己的需求选择合适的插件使用,从而提高工作效率。 另外,Gulp还具有良好的生态系统。无论是官方文档还是社区文档,都非常详细且易于理解。开发者可以很容易地找到所需的信息和教程,学习如何使用Gulp来优化自己的工作流程。 总的来说,Gulp是一个功能强大且易于使用的前端自动化工具。它能够帮助开发者提高工作效率,简化开发流程,同时也具有丰富的插件和优秀的生态系统。无论是小型项目还是大型项目,Gulp都是一个非常好的选择。 ### 回答3: Gulp是一个前端自动化工具,用于简化开发流程和提高工作效率。它基于流(stream)的概念,可以自动化处理和优化前端工作中的许多重复任务。 首先,通过在项目中配置gulpfile.js文件,可以定义各种任务(task)和相应的操作。可以使用Gulp来执行各种编译、压缩、合并、重命名、清理等操作,例如压缩CSS和JavaScript文件、编译Sass或Less、优化图像等等。这些任务可以按照开发者的需求进行自定义配置,满足不同项目的要求。 Gulp使用也非常简单,只需要通过命令行运行gulp命令并指定要执行的任务即可。当有文件变动时,Gulp可以自动监听文件的变化并重新执行相应的任务,实时更新项目的输出。 此外,Gulp还支持插件生态系统,拥有大量的插件可供开发者选择使用。这些插件可以用于执行各种任务,例如自动生成CSS前缀、合并相同类型的文件、启动本地开发服务器等等。 总的来说,Gulp通过简化和自动化前端开发流程,大大提高了开发效率。它的简单易用和丰富的插件生态系统使得开发者能够根据项目需求快速搭建和优化前端工作流程。使用Gulp可以减少重复劳动,提高代码质量和开发效率,因此成为前端开发中不可或缺的工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值