gulp 自动化构建

1、安装

1)安装nodejsjavascript

经过nodejs的npm安装gulp,插件也能够经过npm安装。windows系统是个.msi工具,只要一直下一步便可,软件会自动在写入环境变量中,这样就能在cmd命令窗口中直接使用node或npm指令。css

我上面的cmd,已经被git封装过了,字体都变成彩色的了。安装了这个工具后,还能够经过Git Bash打Linux的命令。git是版本控制的工具,这里也很少说了。html

 

2)npm前端

npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)java

gulp赫然出如今npm的首页中。node

命令提示符执行:webpack

npm install <name> [-g] [--save-dev]

1. <name>:node插件名称。例:npm install gulp-less --save-devgit

2. -g:全局安装。将会安装在C:\Users\Administrator\AppData\Roaming\npm,而且写入系统环境变量;github

非全局安装:将会安装在当前定位目录;web

全局安装能够经过命令行在任何地方调用它,本地安装将安装在定位目录的node_modules文件夹下,经过require()调用;

3. --save:将保存配置信息至package.json(package.json是nodejs项目配置文件);

4. -dev:保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点

配置文件package.json是为了方便下载相关的包,只须要在有这个文件的文件夹下面执行“npm install”(若是安装了cnpm就用“cnpm install”),则会根据package.json下载全部须要的包。【注:我用demo中的package文件在另一台电脑上面直接安装,打“gulp watch”的时候出现了不少错误】

 

3)cnpm

由于npm安装插件是从国外服务器下载,受网络影响大,可能出现异常。

在国内推荐使用淘宝NPM镜像。“这是一个完整 npmjs.org 镜像,你能够用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽可能与官方服务同步”

安装指令以下:

npm install -g cnpm --registry=https://registry.npm.taobao.org

注意安装的时候会出现错误提示,你能够关闭命令窗口再打开,打入“cnpm -v”能够查看版本号。cnpm跟npm用法彻底一致。

 

4)全局安装gulp

cnpm install gulp -g

若是在某个工程文件夹中提示错误,那就手动再安装下“gulp”:

 

5)新建package.json文件

在命令窗口输入指令“cnpm init”。若是在Git Bash打这个指令,会报“No gulpfile found”的错误。

 

6)新建gulpfile.js文件

gulpfile.js是gulp项目的配置文件,里面是task的配置。简易代码以下:

var gulp = require('gulp');

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

 

2、插件与功能

1)全局配置config

能够将须要在gulpfile中引用的参数,放到这里,包括一些路径,功能的开关等。例如:

复制代码
//全局配置文件
module.exports = {
    name : '.....',
    devPath : '.....',    //项目根路径,根路径下能够包含多个项目
    prodPath : '....', //生产路径根路径
    sassPath : '.....', //SASS包含文件路径
    rmHtmlWhitespace : false,//html中是否去除空格
    server : {
        port : 8088
    }
};
复制代码

注意下这里使用了module.exports,这是nodejs的语法。在gulpfile中将会用require引用config。

//加载项目配置
var config = require('./config');

 

2)监控gulp.watch

这个是gulp自带的,就是当你的文件改动了后,就作相应的task。还有一个插件gulp-watch

监控sass中的文件变化,一有变化就作sass的编译。“**”与“*”这种语法能够参考《Gulp:任务自动管理工具

复制代码
gulp.task('watch', function() {
    livereload.listen();
    gulp.watch('**.html', ['html']);
      gulp.watch('./sass/*.scss', ['sass']);
      gulp.watch('./css/*.css', ['css']);
      gulp.watch('./js/*.js', ['js']);
});
复制代码

监控了四个地方的修改,js、html、css和sass,而且有作了自动刷新livereload。这个是经过“gulp-livereload”来实现的。

firefox货chrome要分别安装插件才可运行。chrom插件以下:

安装完后会在浏览器中出现个小按钮,,注意是黑色的时候才是在执行中。还有就是要在相应的task中加相应的代码:

.pipe(livereload())

 

3)sass编译与css压缩

经过sass编写css,能更模块化,多人协做比较方便。安装gulp-sass。“gulpPlumber()”是引用了“gulp-plumber”,任务错误中断自动重传。

复制代码
gulp.task('sass', function() {
    gulp.src('./sass/*.scss')
            .pipe(plumber())
            .pipe(sass())
            .pipe(gulp.dest('./css'))
            .pipe(livereload());
});
复制代码

gulp-cssnano,压缩CSS代码。

复制代码
gulp.task('css', ['sass'], function() {
    //先删除dist中的css,有时候会不更新
    gulp.src('./dist/css/*.css')
        .pipe(rimraf({force: true}));
        
    gulp.src('./css/*.css')
        .pipe(cssnano())
        .pipe(gulp.dest('./dist/css'))
        .pipe(livereload());
});
复制代码

 

4)js压缩与模块化合并

使用gulp-uglify作js的压缩。gulpRimraf()用来删除文件夹,引用自gulp-rimraf

模块化合并使用webpack-stream

复制代码
gulp.task('js', function() {
    //先删除dist中的css,有时候会不更新
    gulp.src('./dist/js/*.js')
        .pipe(rimraf({force: true}));
        
    gulp.src('./js/*.js')
        .pipe(plumber())
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist/js'))
        .pipe(livereload());
});
复制代码

上面的jshint是用来分析代码的,例如分号没写。经过打指令“gulp-jshint”。

 

5)image图片无损压缩

经过gulp-image压缩的图片,有时候能牙70%以上,很是给力。

gulp.task('image', function(){
    gulp.src('./img/*.+(jpg|png|gif|svg)')
         .pipe(imagemin())
       .pipe(gulp.dest('./dist/img'));
});

 

6)html压缩

通过gulp-htmlmin压缩过的html能够缩小不少,能够看到都挤到了一块儿,有不少参数能够选择,好比去除空格等。

gulp.task('html', function() {
    gulp.src('*.html')
        .pipe(htmlmin({collapseWhitespace: true}))
        .pipe(gulp.dest('./dist'))
        .pipe(livereload());
});

 

7)fontmin字体压缩

网上有不少webfont,例如国外的Font Awesome,国内的iconfont。都能作出漂亮的自定义字体。

与西文字体不一样,因为字符集过大,中文字体没法享受 webfont 带来的便利。为了让中文字体也乘上这道风,咱们须要对其进行min。使用指令“gulp-fontmin”。

复制代码
gulp.task('font', function() {
    gulp.src('font/*.+(eot|svg|ttf|woff)')
      .pipe(fontmin({
          text: '人晒'
      }))
      .pipe(gulp.dest('dist/font'));
});
复制代码

配置的两个字“人晒”与没配置的“国”,明显有区别。

 

8)启动一个本地调试服务器

经过gulp-connect,能够作个server。若是你用notpad++这种开发页面,那这个指令会颇有用。

复制代码
gulp.task('server', function(){
    var option = {
        root : config.devPath,
        port : config.server.port
    };
    if(config.server.root){
        option.root = config.server.root;
    }
    connect.server(option);
});
复制代码

上面的localhost能够改为本机的IP地址,手机与电脑在同一个网段的话,就能够直接用手机调试了。

 

demo下载地址:

http://download.csdn.net/download/loneleaf1/9416080

 

参考资料:

http://www.ydcss.com/archives/18   gulp详细入门教程

http://www.runoob.com/nodejs/nodejs-npm.html   NPM 使用介绍

http://javascript.ruanyifeng.com/tool/gulp.html    Gulp:任务自动管理工具

http://www.ghostchina.com/module-exports-and-exports-in-node-js/  Node.js 系列之 —— module.exports 与 exports

http://segmentfault.com/a/1190000002658165?utm_source=tuicool   JGulp: 利用Gulp 配置的前端项目自动化工做流

http://www.w3ctech.com/topic/935    Fontmin 快速指南

相关文章
相关标签/搜索