Open fredshare opened 9 years ago
npm install -g gulp npm install --save-dev gulp
gulp的任务都是以插件的形式存在,以安装gulp-jshint为例
npm install gulp-jshint --save-dev
var gulp = require('gulp'); var jshint = require('gulp-jshint'); var paths = { scripts: 'js/**/*.js', }; gulp.task('lint', function() { return gulp.src(paths.scripts) .pipe(jshint()) .pipe(jshint.reporter('default')); });
gulp lint
其实安装gulp和gulp的插件都是使用node在本地进行安装的,会自动生成相应的目录。最主要的还是这个gulpfile.js。就相当于main函数,当执行gulp的时候,就会主动地去gulpfile.js中去执行相应的任务。
什么是src和pipe?
先看一个unix命令:cat gulpfile.js | wc -l 这是两个独立的命令,cat guplfile.js 表示获取gulpfile.js的内容,wc -l表示统计文件中的行数,中间用|分隔,表示前面命令的输出作为后面命令的输入。src就是获取源文件,pipe就是管道操作。
5个最常见的命令:
gulp.task(name, fn)定义一个任务 gulp.run(tasks...)尽可能多的并行运行多个task gulp.watch(glob, fn)当glob内容发生改变时,执行fn gulp.src(glob)返回一个可读的stream gulp.dest(glob)返回一个可写的stream
查看各个gulp插件的官网:https://www.npmjs.org/
好了,介绍完了,gulp,我们来说说集成开发环境是什么? 我个人是在看了张云龙的博客之后才对前端工程、前端集成开发环境有了一定的了解的。那么我所理解的前端集成开发环境是指 一套解决js自身三大缺陷的通用解决方案。前端语言有哪三大缺陷:
资源定位:获取任何开发中所使用资源的线上路径; 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中; 依赖声明:在一个文本文件内标记对其他资源的依赖关系;
前端集成开发环境的目标是:
代码部署 文件压缩 文件合并 文件加MD5戳 前端模块化开发 组合插件 css sprite less开发 内容嵌入 支持less编译css 支持react 我的项目最终的gulpfile如下
代码部署 文件压缩 文件合并 文件加MD5戳 前端模块化开发 组合插件 css sprite less开发 内容嵌入 支持less编译css 支持react
var gulp = require('gulp'), uglify = require('gulp-uglify'), md5 = require('gulp-md5-plus'), seajs = require('gulp-seajs'), replace = require('gulp-replace'), minifyCss = require('gulp-minify-css'), less = require('gulp-less'), cli = require('./cli.js'), htmlmin = require('gulp-htmlmin'), jshint = require('gulp-jshint'), imagemin = require('gulp-imagemin'), pngquant = require('imagemin-pngquant'), cache = require('gulp-cache'), react = require('gulp-react'), newDep = require('gulp-dep'); //变量设置 var jsPath = { src : '../static/src/scripts', release : '../static/release/scripts' },cssPath = { src : '../static/src/styles', release : '../static/release/styles' },htmlPath = { src : '../application/views', release : '../application/views/' },imgPath = { src : '../static/src/images', release : '../static/release/images/' }; //默认执行方法 gulp.task('default',["main"],function(){ }); process.on('uncaughtException', function(err) { console.log(err); }) //html处理,处理<!--script-->等标签 gulp.task('htmldep',function(){ gulp.src(htmlPath.src + '/**/*.php') .pipe(newDep()) .pipe(gulp.dest(htmlPath.release)); }) //html压缩 gulp.task('htmlmin',function(){ gulp.src([htmlPath.src + '/m3/channel/index.php',"!" + htmlPath.src + 'apiview.php']) .pipe(htmlmin({collapseWhitespace: true})) .pipe(gulp.dest(htmlPath.release + '/m3/channel/')); }) //移动lib任务 gulp.task('libmove',function(){ //移动lib第三方库 不压缩 gulp.src(jsPath.src + '/library/**/*.js') .pipe(gulp.dest(jsPath.release + '/library/')); }) //移动common、mobile、www业务库,seajs处理、压缩 gulp.task('jsmin',function(){ gulp.src([jsPath.src + '/**/*.js', "!" + jsPath.src + "/library/**/*.js"]) .pipe(seajs()) .pipe(uglify({ mangle:true })) .pipe(gulp.dest(jsPath.release)); }) //css压缩、移动 gulp.task('cssmin',function(){ gulp.src(cssPath.src + '/**/*.css') //.pipe(less()) //less编译 .pipe(minifyCss({compatibility: 'ie8'})) .pipe(gulp.dest(cssPath.release)); }) //css的less编译 gulp.task('less',function(){ gulp.src(cssPath.src + '/**/*.less') .pipe(less()) //less编译 .pipe(minifyCss({compatibility: 'ie8'})) .pipe(gulp.dest(cssPath.release)); }) //图片压缩 gulp.task('imgmin',function(){ gulp.src(imgPath.src + '/**/*.{png,jpg,gif,ico}') .pipe(cache(imagemin({ optimizationLevel: 5, progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片 interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染 multipass: true //类型:Boolean 默认:false 多次优化svg直到完全优化 }))) .pipe(gulp.dest(imgPath.release)); }); //react gulp.task('react-dev',['htmldep'],function(){ gulp.src(jsPath.src + '/**/react-test.js') .pipe(react()) .pipe(gulp.dest(jsPath.release)) }) //react gulp.task('react-idc',['htmldep'],function(){ gulp.src(jsPath.src + '/**/react-test.js') .pipe(react()) .pipe(uglify({ mangle:true })) .pipe(gulp.dest(jsPath.release)) }) //react gulp.task('main',['htmldep','libmove','jsmin','cssmin','less'],function() { }); //监听任务 gulp.task('watch', function() { gulp.watch([jsPath.src + '/**/*.js', "!" + jsPath.src + "/library/**/*.js"]).on('change', function(event) { /*var dir = event.path.match(/\/src\/(styles|scripts)(.*)\/.*\.(css|js)$/)[2]; console.log(event.path); console.log(dir); gulp.src(event.path) .pipe(seajs()) .pipe(gulp.dest(jsPath.release + dir));*/ console.log('files changed'); gulp.src([jsPath.src + '/**/*.js', "!" + jsPath.src + "/library/**/*.js"]) .pipe(seajs()) .pipe(gulp.dest(jsPath.release)); }); });
百度的fis集成有资源定位http://fis.baidu.com/docs/more/fis-standard-location.html#在js中定位资源 但在gulp中暂没找到实现方法,如果有,也可能只是替换文件内容的方法吧~
资源定位
gulp介绍
gulp安装
gulp的使用
其实安装gulp和gulp的插件都是使用node在本地进行安装的,会自动生成相应的目录。最主要的还是这个gulpfile.js。就相当于main函数,当执行gulp的时候,就会主动地去gulpfile.js中去执行相应的任务。
先看一个unix命令:cat gulpfile.js | wc -l 这是两个独立的命令,cat guplfile.js 表示获取gulpfile.js的内容,wc -l表示统计文件中的行数,中间用|分隔,表示前面命令的输出作为后面命令的输入。src就是获取源文件,pipe就是管道操作。
gulp.task(name, fn)定义一个任务 gulp.run(tasks...)尽可能多的并行运行多个task gulp.watch(glob, fn)当glob内容发生改变时,执行fn gulp.src(glob)返回一个可读的stream gulp.dest(glob)返回一个可写的stream
查看各个gulp插件的官网:https://www.npmjs.org/
前端集成开发环境
好了,介绍完了,gulp,我们来说说集成开发环境是什么? 我个人是在看了张云龙的博客之后才对前端工程、前端集成开发环境有了一定的了解的。那么我所理解的前端集成开发环境是指 一套解决js自身三大缺陷的通用解决方案。前端语言有哪三大缺陷:
前端集成开发环境的目标是: