博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用gulp构建你的前端项目
阅读量:6827 次
发布时间:2019-06-26

本文共 6996 字,大约阅读时间需要 23 分钟。

什么是gulp?

gulp是新一代的前端项目构建工具,你可以使用gulp及其插件对你的项目代码(less,sass)进行编译,还可以压缩你的jscss代码,甚至压缩你的图片,gulp仅有少量的API,所以非常容易学习。 gulp 使用 stream 方式处理内容。Node催生了一批自动化工具,像Bower,Yeoman,Grunt等。

gulp和grunt的异同点

易于使用:采用代码优于配置策略,Gulp让简单的事情继续简单,复杂的任务变得可管理。高效:通过利用Node.js强大的流,不需要往磁盘写中间文件,可以更快地完成构建。高质量:Gulp严格的插件指导方针,确保插件简单并且按你期望的方式工作。易于学习:通过把API降到最少,你能在很短的时间内学会Gulp。构建工作就像你设想的一样:是一系列流管道。

因为gulp是用node.js写的,所以你需要在你的终端上安装好npmnpmnode.js的包管理器,所以先在你的机子上安装好吧

gulp安装命令

sudo npm install -g gulp

在根目录下新建package.json文件

npm init .

安装gulp

npm install gulp --save-dev

安装好后再次输入gulp -v查看版本号,如下图显示则为成功:

图片描述

安装插件

安装常用插件:

sass的编译                  (gulp-ruby-sass)自动添加css前缀              (gulp-autoprefixer)压缩css                    (gulp-minify-css)js代码校验                  (gulp-jshint)合并js文件                  (gulp-concat)压缩js代码                  (gulp-uglify)压缩图片                    (gulp-imagemin)自动刷新页面                 (gulp-livereload)图片缓存,只有图片替换了才压缩  (gulp-cache)更改提醒                    (gulp-notify)清除文件                    (del)

安装这些插件需要运行如下命令:

$ npm install gulp-ruby-sass gulp-autoprefixer gulp-minify-css gulp-jshint gulp-concat gulp-uglify gulp-imagemin gulp-notify gulp-rename gulp-livereload gulp-cache del --save-dev

-save-save-dev可以省掉你手动修改package.json文件的步骤。

npm install module-name -save 自动把模块和版本号添加到dependencies部分npm install module-name -save-dev 自动把模块和版本号添加到devdependencies部分

gulp命令

你仅仅需要知道的5个gulp命令

gulp.task(name[, deps], fn) 定义任务  name:任务名称 deps:依赖任务名称 fn:回调函数gulp.run(tasks...):尽可能多的并行运行多个taskgulp.watch(glob, fn):当glob内容发生改变时,执行fngulp.src(glob):置需要处理的文件的路径,可以是多个文件以数组的形式,也可以是正则gulp.dest(path[, options]):设置生成文件的路径

glob:可以是一个直接的文件路径。他的含义是模式匹配。

gulp将要处理的文件通过管道(pipe())API导向相关插件。通过插件执行文件的处理任务。

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

gulp.task这个API用来创建任务,在命令行下可以输入$ gulp [default],(中括号表示可选)来执行上面的任务。

gulp官方API文档:

gulp 插件大全:

开始构建项目

在项目根目录下新建一个gulpfile.js文件,粘贴如下代码:

//在项目根目录引入gulp和uglify插件var gulp = require('gulp');var uglify = require('gulp-uglify');gulp.task('compress',function(){    return gulp.src('script/*.js')    .pipe(uglify())    .pipe(gulp.dest('dist'));});

注:gulpfile.js文件名不可更改。

项目需要用到uglify和rename插件,执行以下命令安装:

npm install --save-dev gulp-uglifynpm install --save-dev gulp-rename

以我的为例,进入gulpfile.js所在目录:

cd /Users/trigkit4/gulp-test

然后输入:

var gulp = require('gulp');var uglify = require('gulp-uglify');var rename = require('gulp-rename');gulp.task('compress',function(){    return gulp.src('script/*.js')    .pipe(uglify())    .pipe(rename('jquery.ui.min.js'))    .pipe(gulp.dest('dist'));});

该命令会安装package.json下的全部依赖,如下图所示:

图片描述

完整的gulpfile.js

// 载入外挂var gulp = require('gulp'),     sass = require('gulp-ruby-sass'),    autoprefixer = require('gulp-autoprefixer'),    minifycss = require('gulp-minify-css'),    jshint = require('gulp-jshint'),    uglify = require('gulp-uglify'),    imagemin = require('gulp-imagemin'),    rename = require('gulp-rename'),    clean = require('gulp-clean'),    concat = require('gulp-concat'),    notify = require('gulp-notify'),    cache = require('gulp-cache'),    livereload = require('gulp-livereload'); // 样式gulp.task('styles', function() {   return gulp.src('src/styles/main.scss')    .pipe(sass({ style: 'expanded', }))    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))    .pipe(gulp.dest('dist/styles'))    .pipe(rename({ suffix: '.min' }))    .pipe(minifycss())    .pipe(gulp.dest('dist/styles'))    .pipe(notify({ message: 'Styles task complete' }));}); // 脚本gulp.task('scripts', function() {   return gulp.src('src/scripts/**/*.js')    .pipe(jshint('.jshintrc'))    .pipe(jshint.reporter('default'))    .pipe(concat('main.js'))    .pipe(gulp.dest('dist/scripts'))    .pipe(rename({ suffix: '.min' }))    .pipe(uglify())    .pipe(gulp.dest('dist/scripts'))    .pipe(notify({ message: 'Scripts task complete' }));}); // 图片gulp.task('images', function() {   return gulp.src('src/images/**/*')    .pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))    .pipe(gulp.dest('dist/images'))    .pipe(notify({ message: 'Images task complete' }));}); // 清理gulp.task('clean', function() {   return gulp.src(['dist/styles', 'dist/scripts', 'dist/images'], {read: false})    .pipe(clean());}); // 预设任务gulp.task('default', ['clean'], function() {     gulp.start('styles', 'scripts', 'images');}); // 看守gulp.task('watch', function() {   // 看守所有.scss档  gulp.watch('src/styles/**/*.scss', ['styles']);   // 看守所有.js档  gulp.watch('src/scripts/**/*.js', ['scripts']);   // 看守所有图片档  gulp.watch('src/images/**/*', ['images']);   // 建立即时重整伺服器  var server = livereload();   // 看守所有位在 dist/  目录下的档案,一旦有更动,便进行重整  gulp.watch(['dist/**']).on('change', function(file) {    server.changed(file.path);  }); });

注:pipe()stream模块里传递数据流的一个方法,第一个参数为插件方法,插件会接收从上游流下的文件,进行处理加工后,再往下流。

gulp.task('任务名称', function () {    return gulp.src('文件路径')        .pipe(...)        .pipe(...)        // 直到任务的最后一步        .pipe(...);});

gulp插件

  • gulp-gh-pages:使用gulp来把markdown生成html文档并上传到git pages

var gulp = require('gulp');var ghPages = require('gulp-gh-pages');gulp.task('deploy', function() {  return gulp.src('./dist/**/*')    .pipe(ghPages());});
  • gulp-jade插件:将jade编译成html文件

  • gulp-less插件:将less编译成css文件

var less = require('gulp-less');var path = require('path'); gulp.task('less', function () {  return gulp.src('./less/**/*.less')    .pipe(less({      paths: [ path.join(__dirname, 'less', 'includes') ]    }))    .pipe(gulp.dest('./public/css'));});
  • gulp-live-server 插件:方便的,轻量级的服务器

var gulp = require('gulp');  var gls = require('gulp-live-server');  gulp.task('serve', function() {  //1. serve with default settings  var server = gls.static(); //equals to gls.static('public', 3000);  server.start();  //2. serve at custom port  var server = gls.static('dist', 8888);  server.start();  //3. serve multi folders  var server = gls.static(['dist', '.tmp']);  server.start();  //use gulp.watch to trigger server actions(notify, start or stop)  gulp.watch(['static/**/*.css', 'static/**/*.html'], function (file) {    server.notify.apply(server, [file]);  });});
  • gulp-livereload,可以实时保存刷新,那样就不用按F5和切换界面了

  • gulp-load-plugins:在你的package.json文件中自动加载任意的gulp插件

$ npm install --save-dev gulp-load-plugins

例如一个给定的package.json文件如下:

{    "dependencies": {        "gulp-jshint": "*",        "gulp-concat": "*"    }}

gulpfile.js中添加如下代码:

var gulp = require('gulp');var gulpLoadPlugins = require('gulp-load-plugins');var plugins = gulpLoadPlugins();

plugins.jshint = require('gulp-jshint');

plugins.concat = require('gulp-concat');

  • gulp-babel:gulp 的babel插件,

$ npm install --save-dev gulp-babel babel-preset-es2015

使用方法:

const gulp = require('gulp');const babel = require('gulp-babel');gulp.task('default', () => {    return gulp.src('src/app.js')        .pipe(babel({            presets: ['es2015']        }))        .pipe(gulp.dest('dist'));});

官方github

图片描述

本人兼职前端付费技术顾问,如需帮助请加本人微信hawx1993,非诚勿扰

1.为初学前端而不知道怎么做项目的你指导2.指导并扎实你的JavaScript基础3.帮你准备面试并提供相关指导性意见4.为你的前端之路提供极具建设性的意见5.让你的学习更有效率,对知识点的理解更加透彻6.不解答可以百度到的答案,也不解答你遇到的bug付费(每月仅需99)能让我更有耐心和责任心的为你指导,让双方产生更良好的协作

转载地址:http://ghykl.baihongyu.com/

你可能感兴趣的文章
[转]Struts2+Spring3+Hibernate4+Maven+EasyUI整合入门视频+视
查看>>
KVM虚拟化主机安装
查看>>
内部命令vs外部命令
查看>>
CenOS5 x86下配置Nginx+keepalived主从负载均衡
查看>>
named启动脚本修改
查看>>
RHEL6.5的安装过程
查看>>
通过vftps和虚拟帐号增强ftp的安全性
查看>>
创客集结号:3D打印的材料
查看>>
Ceph
查看>>
架构的“一小步”,业务的一大步
查看>>
迭代器,生成器
查看>>
如何用二分法在有序数组中找到你想要的数字
查看>>
单向ospf
查看>>
深蓝串口调试工具2017冬季版(2.14.11)
查看>>
linux ssh_config和sshd_config配置文件
查看>>
Oracle教程之管理索引(六)--Oracle重建索引
查看>>
ubuntu编译最简环境
查看>>
回顾一个考务系统的开发
查看>>
何为云计算
查看>>
nginx安装手册
查看>>