项目构建 -- gulp

Gulp介绍
  * 中文主页: http://www.gulpjs.com.cn/
  * gulp是与grunt功能类似的**前端项目构建**工具, 也是基于Nodejs的自动**任务运行器**
  * 能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的合并、压缩、检查、监听文件变化、浏览器自动刷新、测试等任务
  * gulp更高效(异步多任务), 更易于使用, 插件高质量

1、特点:
   - 任务化
   - 基于流(数据流)
   - 执行任务是异步的:注意less和css任务的执行顺序
2、细节:
   - gulp.src('src/js/**/*.js')  深度遍历
   - 转换less
      - 将转换完的文件放置在原文件css夹下
3、构建任务:
    -半自动: gulp-livereload
      需要手动刷新,不够智能
  - 全自动:gulp-connect
      自动刷新:原理是依赖connect内置的微型服务器
       open:可自动帮助开启链接。

Gulp:
    http://www.gulpjs.com.cn/(中文官网)
    http://www.jianshu.com/p/cc1cb9a5650c(教程)
    http://www.ydcss.com/archives/category/%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7 (详细教程)

使用步骤:

1.安装 nodejs, 查看版本: node -v

2.创建一个简单的应用gulp_test

 |- dist
  |- src
    |- js
    |- css
    |- less
  |- index.html
  |- gulpfile.js-----gulp配置文件
  |- package.json
    {
      "name": "gulp_test",
      "version": "1.0.0"
    } 

3.安装gulp:

全局安装gulp
 npm install gulp -g
局部安装gulp
 npm install gulp --save-dev

4.配置编码: gulpfile.js

 //引入gulp模块
    var gulp = require('gulp');
    //定义默认任务
    gulp.task('taskName', function() {
      // 将你的任务的任务代码放在这
    });
    gulp.task('default', ['taskName'])//异步执行

5.构建命令:

gulp
 6.使用gulp插件
  * 相关插件:
    * gulp-concat : 合并文件(js/css)
    * gulp-uglify : 压缩js文件
    * gulp-rename : 文件重命名
    * gulp-less : 编译less
    * gulp-clean-css : 压缩css
    * gulp-livereload : 实时自动编译刷新
  * 重要API
    * gulp.src(filePath/pathArr) : 
      * 指向指定路径的所有文件, 返回文件流对象
      * 用于读取文件
    * gulp.dest(dirPath/pathArr)
      * 指向指定的所有文件夹
      * 用于向文件夹中输出文件
    * gulp.task(name, [deps], fn) 
      * 定义一个任务
    * gulp.watch() 
      * 监视文件的变化

7.处理js

src/js/test1.js
(function () {
          function add(num1, num2) {
            var num3 = 0;
            num1 = num2 + num3;
            return num1 + num2;
          }
          console.log(add(10, 30));
        })();
src/js/test2.js
  (function () {
          var arr = [2,3,4].map(function (item, index) {
              return item+1;
          });
          console.log(arr);
        })();

8.下载插件:

 npm install gulp-concat gulp-uglify gulp-rename --save-dev

9.配置编码 gulpfile.js

      var concat = require('gulp-concat');
      var uglify = require('gulp-uglify');
      var rename = require('gulp-rename');
      
      gulp.task('js', function() {
          return gulp.src('src/js/*.js') //操作的源文件,找目标原文件 将原文件的数据读取到gulp的内存中
              .pipe(concat('built.js')) /合并js文件    
              .pipe(gulp.dest('dist/js')) //临时输出合并后的js文件
              .pipe(rename({suffix: '.min'})) //重命名  
              .pipe(uglify())    //压缩js文件
              .pipe(gulp.dest('dist/js'));//输出
      });
      
      gulp.task('default', ['js']);
10.页面引入js浏览测试 : index.html
<script type="text/javascript" src="dist/js/built.min.js"></script>

11.打包测试: gulp

gulp

12.处理css文件

src/css/test1.css
 #div1 {
          width: 100px;
          height: 100px;
          background: green;
        }
src/css/test2.css
 #div2 {
          width: 200px;
          height: 200px;
          background: blue;
        }
src/less/test3.less
 @base: yellow;
        .index1 { color: @base; }
        .index2 { color: green; }

13.下载插件:

npm install gulp-less gulp-clean-css --save-dev

14.配置编码gulpfile.js

      var less = require('gulp-less');
      var cleanCSS = require('gulp-clean-css');

//注册编译less的任务
gulp.task('less', function () {
	return gulp.src('src/less/*.less')
		.pipe(less())//将less文件转换为css文件
		.pipe(gulp.dest('src/css/'))
		
});

 //css处理任务, 指定依赖的任务less任务执行完,在执行cssTask任务
      gulp.task('css',['less'], function () {
      
        return gulp.src('src/css/*.css')
            .pipe(concat('built.css'))
            .pipe(gulp.dest('dist/css'))
            .pipe(rename({suffix: '.min'}))
            .pipe(cleanCSS({compatibility: 'ie8'}))
            .pipe(gulp.dest('dist/css'));
      });

 gulp.task('default', ['minifyjs','less', 'css']);

15.页面引入css浏览测试 : index.html

 <link rel="stylesheet" href="dist/css/built.min.css">
      <div id="div1" class="index1">div1111111</div>
      <div id="div2" class="index2">div2222222</div>

16.打包测试: gulp

gulp

17.处理html

下载:

 npm install gulp-htmlmin --save-dev

18.配置编码

 var htmlmin = require('gulp-htmlmin');
        //压缩html任务
        gulp.task('htmlMinify', function() {
            return gulp.src('index.html')
                .pipe(htmlmin({collapseWhitespace: true}))
                .pipe(gulp.dest('dist'));
        });
        gulp.task('default', ['minifyjs', 'less','css', 'htmlMinify']);

19.修改页面引入

 <link rel="stylesheet" href="css/built.min.css">
        <script type="text/javascript" src="js/built.min.js"></script>

20

打包测试: gulp  

21.自动编译

下载插件

npm install gulp-livereload --save-dev

22. 配置编码:

 var livereload = require('gulp-livereload');

 gulp.task('htmlMinify', function() {
            return gulp.src('index.html')
                .pipe(htmlmin({collapseWhitespace: true}))
                .pipe(gulp.dest('dist'));
                .pipe(livereload());//实时更新

        });
      //所有的任务,所有的pipe,都加.pipe(livereload());实时更新


//注册监视的任务--->半自动
gulp.task('watch',['default'], function () {
	//开启监视
	livereload.listen();

	//确认监视的目标并且绑定相应的任务
	gulp.watch('src/js/*.js', ['js']);
	gulp.watch(['src/css/*.css', 'src/less/*.less'], ['css', 'less']);
});

23,注册一个全自动的任务,热加载(实时加载)

1、下载插件:gulp-connect
npm install gulp-connect --save-dev

npm install open --save-dev
2、 注册 热加载的任务 server,注意依赖build任务 
3、注册热加载的任务
   
var connect = require('gulp-connect');
var open = require('open');

//注册一个全自动的任务
gulp.task('server',['default'], function () {
	//配置服务器选项
	connect.server({
		root : 'dist/',//监视的源目标文件路径
		livereload : true,//是否实时刷新
		port : 5000//开启端口号
	});
 // 自动开启链接
	open('http://localhost:5000/');

	//确认监视的目标并且绑定相应的任务
	gulp.watch('src/js/*.js', ['js']);
	gulp.watch(['src/css/*.css', 'src/less/*.less'], ['css', 'less']);
})

24.打包加载gulp插件

* 打包加载gulp插件
* 前提:将插件下载好。
* 下载打包插件: gulp-load-plugins
npm install gulp-load-plugins --save-dev
引入:
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();//引入的是函数,调用以后返回的是对象

//其他的插件不用再引入了,所有的插件用 $ 引出,其他插件的方法名统一为插件的功能名字(即插件名字的最后一部分):如:concat,connect,cssmin...

// var concat = require('gulp-concat');
// var rename = require('gulp-rename');
// var uglify = require('gulp-uglify');
// var less = require('gulp-less');
// var cssClean = require('gulp-clean-css');
// var htmlMin = require('gulp-htmlmin');
// var livereload = require('gulp-livereload');
// var connect = require('gulp-connect');
var open = require('open');

//注册合并压缩js的任务
gulp.task('js', function () {
	//你的任务执行 具体过程
	return gulp.src('src/js/*.js')//找目标原文件 将原文件的数据读取到gulp的内存中
		.pipe($.concat('build.js'))//合并js文件
		.pipe(gulp.dest('dist/js/'))//临时输出
		.pipe($.uglify())//压缩js文件
		.pipe($.rename({suffix:'.min'}))//重命名
		.pipe(gulp.dest('dist/js/'))//输出
		//.pipe(livereload())//实时加载
		.pipe($.connect.reload())
});

//注册编译less的任务
gulp.task('less', function () {
	return gulp.src('src/less/*.less')
		.pipe($.less())//将less文件转换为css文件
		.pipe(gulp.dest('src/css/'))
		//.pipe(livereload())//实时加载
		.pipe($.connect.reload())
});

//注册合并压缩css的任务
gulp.task('css',['less'] ,function () {
	return gulp.src('src/css/*.css')
		.pipe($.concat('build.css'))
		.pipe(gulp.dest('dist/css/'))
		.pipe($.rename({suffix:'.min'}))
		.pipe($.cleanCss({compatibility: 'ie8'}))
		.pipe(gulp.dest('dist/css/'))
		//.pipe(livereload())//实时加载
		.pipe($.connect.reload())

});

//注册压缩html的任务
gulp.task('html', function () {
	return gulp.src('index.html')
		.pipe($.htmlmin({collapseWhitespace: true}))
		.pipe(gulp.dest('dist/'))
		//.pipe(livereload())//实时加载
		.pipe($.connect.reload())
});

//注册监视的任务--->半自动
gulp.task('watch',['default'], function () {
	//开启监视
	livereload.listen();

	//确认监视的目标并且绑定相应的任务
	gulp.watch('src/js/*.js', ['js']);
	gulp.watch(['src/css/*.css', 'src/less/*.less'], ['css', 'less']);
});

//注册一个全自动的任务
gulp.task('server',['default'], function () {
	//配置服务器选项
	$.connect.server({
		root : 'dist/',//监视的源目标文件路径
		livereload : true,//是否实时刷新
		port : 5000//开启端口号
	});
	open('http://localhost:5000/');

	//确认监视的目标并且绑定相应的任务
	gulp.watch('src/js/*.js', ['js']);
	gulp.watch(['src/css/*.css', 'src/less/*.less'], ['css', 'less']);
})




//注册一个默认任务
gulp.task('default', ['js', 'less', 'css','html']);


其他的插件不用再引入了

所有的插件用 $ 引出,其他插件的方法名统一为插件的功能名字(即插件名字的最后一部分):如:concat,connect,cssmin...

若插件名字中有‘-’,则字母大写,比如‘gulp-clean-css’插件  $.cleanCss({compatibility: 'ie8'})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值