gulp
https://github.com/gulpjs
可以自动化执行任务的工具,主要用于生产环境和开发环境的文件处理
Gulp是一个新的基于流的管道式构建系统,需要很少的配置并且更快
主要作用:
1、多个js或css文件合并、压缩
2、Sass或Less的编译
3、图像的压缩
3、实时刷新页面的本地服务器
gulp对按需加载不好做到,如A和B页面都依赖base.js,但又各依赖a.js和b.js,这种情况gulp打包是将三个都包括了,所以css和html部分gulp来处理,js的webpack处理
安装、使用
$ npm install -g gulp // 全局安装Gulp
$ npm init // 创建package.json 项目描述文件
$ npm install --save-dev gulp // 作为项目的开发依赖(只在开发时用,不会发布到线上)
$ touch gulpfile.js
var gulp = require('gulp');
gulp.task('default', function(){
})
$ gulp // 运行gulp
gulp 方法
1、gulp.src(): 获取到想要处理的文件流,可以是一个字符串或者数组,返回一个stream
1)、*.{png,jpg,gif,ico} // 匹配文件
2)、**/*.html // 目录用**、文件名用*
gulp.task('count', function(){
gulp.src(['aa.html', 'bb.html']) // 或 gulp.src('src/*.html');
.pipe(gulp.uglify())
})
2、gulp.pipe(): 将获取到的文件流通过pipe()导入到gulp的插件中进行处理
3、gulp.dest(): 用来写文件的,插件处理完,通过dest()处理完成后把流中的内容写到指定的文件中
var gulp = require('gulp');
gulp.src('js/main.js') // 获取文件的流的api
.pipe(gulp.uglify()) // 文件进行压缩
.pipe(gulp.dest('dist/[name].min.js')); // 写文件的api
4、gulp.task('任务名' [依赖任务], callback): 定义任务,依赖任务会在当前任务执行前完成
gulp.task('test', ['styles', 'task'], function() {
// 将你的默认的任务代码放在这
});
# gulp test // 执行任务
5、gulp.watch('要监视文件的匹配模式', [要执行的task定义的任务], callback): 监视文件的变化,变化后来执行定义的任务
gulp 执行命令
-v 或 --version 会显示全局和项目本地所安装的 gulp 版本号
--gulpfile 手动指定一个 gulpfile 的路径,这在你有很多个 gulpfile 的时候很有用。这也会将 CWD 设置到该 gulpfile 所在目录
--cwd dirpath 手动指定 CWD。定义 gulpfile 查找的位置,此外,所有的相应的依赖(require)会从这里开始计算相对路径
-T 或 --tasks 会显示所指定 gulpfile 的 task 依赖树
--tasks-simple 会以纯文本的方式显示所载入的 gulpfile 中的 task 列表
--color 强制 gulp 和 gulp 插件显示颜色,即便没有颜色支持
--no-color 强制不显示颜色,即便检测到有颜色支持
--silent 禁止所有的 gulp 日志
Gulp 扩散操作
1、复制单个文件task
gulp.task('copy-html',function(){
return gulp.src('app/index.html').pipe(gulp.dest('dist'));
});
2、复制多个文件
gulp.task('copy-images',function(){
return gulp.src('app/imgs/**/*.{jpg,png}').pipe(gulp.dest('dist'));
});
gulp.task('copy-other',function(){
return gulp.src(['app/css/*.css','app/js/*.js'],{base:'app'}).pipe(gulp.dest('dist'));
});
gulp 插件
https://gulpjs.com/plugins/
$ gulp
$ gulp-babel babel-core babel-preset-env // ES6转ES5
$ babel-plugin-transform-runtime // ES6转ES5运行时转换
$ gulp-uglify // 压缩js
$ gulp-concat // 合并js
$ gulp-jshint // js语法检测
$ gulp-less // less编译
$ gulp-ruby-sass // sass编译
$ gulp-minify-css // css压缩
$ gulp-css-base64 // 生成64位图标
$ gulp-htmlmin // html压缩
$ gulp-file-include // includer嵌入到另一个html文件
$ gulp.spritesmith // 雪碧图
$ gulp-imagemin // 压缩图片
$ imagemin-pngquant // 图片的深度压缩
$ gulp-cache // 只压缩修改的图片
$ gulp-rev-append // 加版本号,给页面文件引用的js和css资源
$ gulp-autoprefixer // 自动补齐前缀,根据设置浏览器版本自动处理浏览器前缀 CSS3的前缀
$ gulp-react // react区分jsx文件进行转换
$ gulp-webpack // webpack
$ gulp-amd-optimizer // requirejs 压缩
$ vinyl-buffer // 流缓存
$ merge-stream // 合并流
$ gulp-watch // 侦听变化自动执行task
$ gulp-livereload // 当监听文件发生变化时,浏览器自动刷新页面
$ gulp-header // 注释自定义插件
$ gulp-rimraf // 清除文件
$ gulp-clean // 删除文件或目录
$ gulp-plumber // 错误提示
$ gulp-notify // 消息提示
$ gulp-rename // 重命
$ gulp-connect // gulp的服务器
$ gulp-browserify //
$ gulp-open // 打开浏览器
$ gulp-md5-plus // 生成md5码
一、gulpfile.js中引用插件
var uglify = require('gulp-uglify');
二、gulp-load-plugins 模块化管理插件
1、一般情况下,gulpfile.js中的模块需要一个个加载。
var gulp = require('gulp')
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
concat = require('gulp-concat');
gulp.task('js', function () {
return gulp.src('js/*.js')
.pipe(uglify())
.pipe(concat('app.js'))
.pipe(gulp.dest('build'));
});
2、gulp-load-plugins 会加载 package.json中存在下面的插件依赖:
"devDependencies": {
"gulp": "^3.9.0",
"gulp-uglify": "^2.6.0",
"gulp-concat": "^2.2.0"
}
var gulp = require('gulp');
var $ = require('gulp-load-plugins')(); // 加载gulp-load-plugins插件,并立刻运行
使用:$.uglify 可以省去单个引入
gulp.task('add', function(){
gulp.src(['js/main.js'])
.pipe($.concat)
.pipe($.uglify) // $.uglify就可以调用了
.pipe(gulp.dest('dist/[name].min.js')); // 如果不改变文件名就直接写成 dist/js/
})
gulp + webpack构建多页面
├── .DS_Store
├── src // 生产目录
├── dist // 发布目录
├── gulpfile.js
├── node_modules
└── package.json
| 参考资料
| http://www.gulpjs.com.cn/ gulp中文网
| http://www.ydcss.com/archives/category/%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7
| http://www.gulpjs.com.cn/docs/recipes/ gulp 技巧集
| http://www.gulpjs.com.cn/docs/api/ gulp api
| http://www.techug.com/gulp gulp使用指南
| http://www.w3ctech.com/topic/134 gulp开发教程
| http://www.qianduancun.com/nodejs/33.html gulp-load-plugins[模块化管理插件]
| http://segmentfault.com/a/1190000003098076#articleHeader0 利用 gulp 处理前端工作流程
| http://www.cnblogs.com/2050/p/4198792.html 前端构建工具gulpjs的使用介绍及技巧
| https://www.cnblogs.com/weixing/p/5474324.html
|
| 多页面
| https://www.cnblogs.com/maskmtj/archive/2016/07/21/5597307.html
| https://github.com/fwon/gulp-webpack-demo
|
| 文件流
| http://segmentfault.com/a/1190000000519006 nodejs中流(stream)的理解
| http://www.it165.net/pro/html/201406/15924.html Node.js Stream(流)的学习笔记
| http://segmentfault.com/a/1190000000357044 Node 中的流(Stream)
|
| Promise
| http://segmentfault.com/a/1190000002591145 深入理解Promise实现细节
| http://www.tuicool.com/articles/fe6Jbyz Promise实现原理
| http://segmentfault.com/a/1190000003028634 异步编程 promise模式 的简单实现
| http://sentsin.com/web/861.html
国内查看评论需要代理~