[转]gulp构建前端工程

摘要: Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass、LESS 优化资源,比如压缩CSS、JavaScript、压缩图片 当然Gulp能做的远不止这些。如果你够疯狂,你甚至可以使用它搭建一个静态页面生成器。Gulp真的足够强大,但你必须学会驾驭它。 这是这篇文章的主要目的。帮助你了解Gulp的基础用法,助你早日完成一统天下的大业。 在我们深入了解之前,我们先来说说为什么是Gulp。 为什么是Gulp? 类似Gulp的工具,我们通常称之为构建工具。如今最流行的两个构建工具是Gulp和Grunt。 已...

什么是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的包管理器,所以先在你的机子上安装好node.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...):尽可能多的并行运行多个task

gulp.watch(glob, fn):当glob内容发生改变时,执行fn

gulp.src(glob):置需要处理的文件的路径,可以是多个文件以数组的形式,也可以是正则

gulp.dest(path[, options]):设置生成文件的路径

glob:可以是一个直接的文件路径。他的含义是模式匹配。
gulp将要处理的文件通过管道(pipe())API导向相关插件。通过插件执行文件的处理任务。

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

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

gulp官方API文档:https://github.com/gulpjs/gulp/blob/master/docs/API.md

gulp 插件大全:http://gulpjs.com/plugins/

开始构建项目

在项目根目录下新建一个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-uglify
npm 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-connect

npm install gulp-connect --save-dev

添加task

gulp.task(‘webserver‘, function() {
    connect.server({
        livereload: true,
        port: 8888
    });
});

gulp插件

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

https://github.com/shinnn/gulp-gh-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: https://github.com/gulpjs/gulp

时间: 2024-07-29 19:45:41

[转]gulp构建前端工程的相关文章

Gulp构建前端自动化工作流之:常用插件介绍及使用

在对Gulp有了一个初步的了解之后,我们开始构建一个较为完整的Gulp开发环境. 本文主要分为6个段落: 1. 构建项目目录结构(Directory Structure Build) 2. 插件介绍及使用方法(Tasks and dependencies) 3. 扩展优化(Extend & Optimize Task) 4. 其他插件介绍(Other plug-ins) 5. 匹配规则(Match Files) 6. 注意事项(Attention) 关于Gulp的入门介绍及安装方法,可先去 <

Gulp构建前端自动化项目

类似于Grunt,gulp是另一个同样功能很强大的前端项目自动化利器. 下面是项目的效果: 另一个页面: 要求: Node.js gulp.js bower 下载项目代码于本地, 进入该目录,执行如下命令: 1 cd my-demo2 npm install 3 bower install 安装完成之后,运行如下命令: 1 gulp 现在项目已经跑起来了,所有在src目录下的文件都会编译生成相应的文件,并存入build文件夹下,同时,src目录下的文件发生变化时,会新生成相应的文件,并且已经启动

Vue+Webpack构建前端工程

1.选择一个目录执行vue init webpack 工程名字<工程名字不能用中文>,若使用vue init webpack-simple 工程名字<工程名字不能用中文>则不会生成config目录 2.安装项目依赖(cnpm install 或者 npm install) 3.启动项目 cnpm run dev -d 或者 npm run dev -d 4.打包项目到生成环境 cnpm run build 或者 npm run build 原文地址:https://www.cnbl

记一次前端工程构建

需求背景 我所在的项目组主要负责公司的A产品A1模块的界面开发.经过上半年紧锣密鼓.加班加点地开发之后,终于在7月份在国内的L局点成功上线.当时那个激动啊,苦逼的生活终于过去了,大家都跟我high起来!可是到了下半年,由于公司市场人员的给力表现,又在海外开拓了D局点和T局点,真是喜(yu)大(ku)普(wu)奔(lei)啊! 由于L局点的需求还没有明确,所以L局点的事情先按住不表,先说说D局点的需求.其实,客户的实际要求也不多,对于界面来说,无非是整体风格要与客户现有的产品保持一致.所以最终预计

在Maven+Spring项目中使用Node.js的Gulp进行前端自动化构建

刚开始打算进行前后端分离开发,后来发现在使用JSP或者Freemarker做动态页面时,想发挥这些自动化构建工具牛逼闪闪的livereload功能并不是那么的轻易,因为我们必须还得调教它们去调用Java容器.现在全球社区似乎还没有成熟的插件可以自动帮我们调教Java容器,百度Fis的Jello也只是做了一下velocity的自动化,自己写感觉就是自虐,所以在这个问题上倒不如把Gulp当成一个Maven来使用,反正J2EE开发人员应该大都习惯了修改代码之后漫长无尽的build.相反,如果对Gulp

前端工程筹建NodeJs+gulp+bower

1.安装nodejs nodejs 官网下载安装文件 安装完成之后,在命令窗口执行,(显示nodejs版本) 和(显示npm版本)可以使用这两个命令查看是否安装成功: node -v npm -v 2.npm 简介 nodejs 安装过程中会自动安装npm,npm  是nodejs的程序包管理工具,用于从网上下载程序包并安装还可以管理工程对程序包的依赖,类似于java平台上的maven. 程序包是指实现了某些功能,并可以运行于nodejs平台,一般是开源程序,如压缩js代码程序,检查js代码正确

用gulp替代fekit构建前端项目

https://segmentfault.com/a/1190000003060016 离开qunar有一个多月了,在离开的时候就决定不再用fekit.做出这个决定并不是因为fekit不好,恰恰相反,fekit帮我们做了很多事情,还屏蔽了许多细节,让开发人员能够专注于开发过程.不过随着fekit的升级,也出现了一些问题,同时fekit和公司业务及发布流程有一定耦合,所以觉得采用开源的构建方案. 在使用gulp的过程中,基本也是依据使用fekit的思路来逐步完善构建过程的,所以还是要感谢fekit

Gulp安装及配合组件构建前端开发一体化

所有功能前提需要安装nodejs(本人安装版本v0.10.26)和ruby(本人安装版本1.9.3p484). Gulp 是一款基于任务的设计模式的自动化工具,通过插件的配合解决全套前端解决方案,如静态页面压缩.图片压缩.JS合并.SASS同步编译并压缩CSS.服务器控制客户端同步刷新. Gulp安装 全局安装Gulpjs npm install -g gulp  #全局安装 局部安装Gulpjs npm install gulp --save-dev # 局部安装 全局安装 1. 将安装包放在

用gulp构建你的前端项目

前言 前端技术发展日新月异,随着模块化.组件化的提出,前端变得越来越复杂,静态资源越来越多,那么对静态资源的处理,如压缩,合并,去掉调试信息.. 如果还是人工去处理,效率非常之低且还容易出错,于是自动化的处理工具也就必然出现了.就像后端我们一般用maven管理项目,那么前端gulp是个不错的选择. 什么是gulp 是一个基于 Node.js 流.Javascript语法的快速构建前端项目并减少频繁的 IO 操作的自动化工具. Gulp有什么好处 易于学习使用 通过最少的API(核心.src().