http://www.cnblogs.com/starof/p/5194622.htmljavascript
前端自动化流程工具,用来合并文件,压缩等。css
gulp基于node.js,要经过nodejs的npm安装gulp,因此先要安装nodejs环境,经过英文官网下载或者中文网下载安装。html
node.js插件在windows系统下是个.msi工具,只要一直下一步便可,软件会自动在写入环境变量中,这样就能在cmd命令窗口中直接使用node或npm命令。npm更多介绍见文章最后附件部分。前端
首先确保你已经正确安装了nodejs环境。而后用如下命令全局方式安装gulp。java
npm install gulp -g 或者cnpm install gulp -g
cnpm更多介绍见文章最后附件部分。 node
好比个人项目目录为:E:\gulpprojectwebpack
cmd窗口进入gulpproject目录(可参考附件),输入命令npm init,一路按enter完成后自动生成package.json文件。git
Note:可能会遇到Sorry, name can no longer contain capital letters.意思是项目名称不能包含大写字母。github
全局安装gulp后,还须要在每一个要使用gulp的项目中都单独安装一次。web
执行命令
npm install gulp --save-dev
完成后会生成node_modules文件夹。
#安装gulp-uglify npm install gulp-uglify --save-dev #安装gulp- image npm install gulp-image --save-dev #安装gulp-cssnano npm install gulp-cssnano --save-dev #安装del npm install del --save-dev
gulpfile.js是gulp项目的配置文件,里面包含的是task的配置。最简单的gulpfile.js配置以下:该配置文件定义了一个默认任务。
var gulp = require('gulp'); gulp.task('default',function(){ console.log('hello world'); });
项目中用到哪些功能可加入配置文件。
假设个人文件目录以下:E:gulpproject中有一个新的项目1buy,包括了要压缩的css,images和js等。
新建gulpfile.js 放在1buy文件夹中。
以下为我用的gulpfile.js配置,包括压缩js,css,images,编译less功能。
var gulp = require('gulp'), uglify = require('gulp-uglify'), concat = require('gulp-concat'), rename = require('gulp-rename'), cssnano = require('gulp-cssnano'), image = require("gulp-image"), del = require('del'), less = require('gulp-less'); //压缩css,压缩后的文件放入dest/css gulp.task('minifycss', function() { return gulp.src('css/*.css') .pipe(cssnano()) //压缩 .pipe(gulp.dest('dest/css'));//输出 }); //合并并压缩css,合并压缩后的文件放入dest/css gulp.task('concatminifycss', function() { return gulp.src('css/*.css') .pipe(concat('main.css')) //合并全部css到main.css //.pipe(gulp.dest('dest/css')) //输出main.css到文件夹 //.pipe(rename({suffix: '.min'})) //rename压缩后的文件名 .pipe(cssnano())//压缩 .pipe(gulp.dest('dest/css'));//输出 }); //压缩js,压缩后的文件放入dest/js gulp.task('minifyjs', function() { return gulp.src('js/*.js') .pipe(uglify())//压缩 .pipe(gulp.dest('dest/js'));//输出 }); //合并并压缩js,合并压缩后的文件放入dest/js gulp.task('concatminifyjs', function() { return gulp.src('js/*.js') .pipe(concat('main.js')) //合并全部js到main.js .pipe(gulp.dest('dest/js')) //输出main.js到文件夹 .pipe(rename({suffix: '.min'})) //rename压缩后的文件名 .pipe(uglify())//压缩 .pipe(gulp.dest('dest/js'));//输出 }); //压缩图片,压缩后的文件放入dest/images gulp.task('image',function(){ gulp.src('images/*.+(jpg|png|gif|svg)') .pipe(image())//压缩 .pipe(gulp.dest('dest/images'));//输出 }); //执行压缩前,先删除dest文件夹里的内容 gulp.task('clean', function(cb) { del(['dest/*'], cb) }); //编译less到css gulp.task("less",function(){ gulp.src('css/*.less') .pipe(less()) .pipe(gulp.dest("dest/css")); }); //监视文件的变化 gulp.task("watch",function(){ gulp.watch("css/*.less",['less']); }); //默认命令,在cmd中输入gulp后,执行的就是这个命令 gulp.task('default', function() { // 将你的默认的任务代码放在这 gulp.start('clean','concatminifycss','image','concatminifyjs'); });
具体每一个插件功能下面详细介绍。
要运行gulp任务,只需切换到存放gulpfile.js
文件的目录(windows平台使用cmd),而后在命令行中执行gulp
命令就好了,gulp
后面能够加上要执行的任务名,例如gulp clean
,若是没有指定任务名,则会执行任务名为default
的默认任务。
当gulpfile.js太大时就很差维护了,此时能够将须要在gulpfile中引用的参数,放到这里,包括一些路径,功能的开关等。例如:config.js内容以下:
module.exports = {
name : '.....', devPath : '.....', //项目根路径,根路径下能够包含多个项目 prodPath : '....', //生产路径根路径 sassPath : '.....', //SASS包含文件路径 rmHtmlWhitespace : false,//html中是否去除空格 webpackEntry : { index : 'index.js'//js合并 }, server : { port : 8088 } };
注意下这里使用了module.exports,这是nodejs的语法。在gulpfile中将会用require引用config。
//加载项目配置 var config = require('./config');
经过gulp-image压缩的图片,有时候能压80%以上,很是给力。
github地址:https://github.com/1000ch/gulp-image
//压缩图片,压缩后的文件放入dest/images gulp.task('image',function(){ gulp.src('images/*.+(jpg|png|gif|svg)') .pipe(image())//压缩 .pipe(gulp.dest('dest/images'));//输出 });
使用gulp-uglify作js的压缩,gulp-concat合并。
//压缩js,压缩后的文件放入dest/js gulp.task('minifyjs', function() { return gulp.src('js/*.js') .pipe(uglify())//压缩 .pipe(gulp.dest('dest/js'));//输出 }); //合并并压缩js,合并压缩后的文件放入dest/js gulp.task('concatminifyjs', function() { return gulp.src('js/*.js') .pipe(concat('main.js')) //合并全部js到main.js .pipe(gulp.dest('dest/js')) //输出main.js到文件夹 .pipe(rename({suffix: '.min'})) //rename压缩后的文件名 .pipe(uglify())//压缩 .pipe(gulp.dest('dest/js'));//输出 });
以下也能够实现,but我没用过。
gulpRimraf()用来删除文件夹,引用自gulp-rimraf。
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”。
模块化合并使用webpack-stream,点击查看文档。github上面还有篇说明教程。
gulp.task('webpack', function(){ var entry = {}; for(var name in config.webpackEntry){ entry[name] = './js/' + config.webpackEntry[name]; } //排除bundle文件 return gulp.src('./js/*[^bundle].js') .pipe(plumber()) .pipe(webpack({ entry: entry, output: { filename: '[name].bundle.js', } })) .pipe(gulp.dest('./js')); });
和js相似。
//压缩css,压缩后的文件放入dest/css gulp.task('minifycss', function() { return gulp.src('css/*.css') .pipe(cssnano()) //压缩 .pipe(gulp.dest('dest/css'));//输出 }); //合并并压缩css,合并压缩后的文件放入dest/css gulp.task('concatminifycss', function() { return gulp.src('css/*.css') .pipe(concat('main.css')) //合并全部css到main.css //.pipe(gulp.dest('dest/css')) //输出main.css到文件夹 //.pipe(rename({suffix: '.min'})) //rename压缩后的文件名 .pipe(cssnano())//压缩 .pipe(gulp.dest('dest/css'));//输出 });
这个是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())
less请参考:gulp编译less
经过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()); });
通过gulp-htmlmin压缩过的html能够缩小不少,能够看到都挤到了一块儿,有不少参数能够选择,好比去除空格等。
还能够经过gulp-replace来给静态资源文件加个版本号。
gulp.task('html', function() { gulp.src('*.html') .pipe(replace('__VERSION', Date.now().toString(16))) .pipe(htmlmin({collapseWhitespace: true})) .pipe(gulp.dest('./dist')) .pipe(livereload()); });
网上有不少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')); });
配置的两个字“人晒”与没配置的“国”,明显有区别。
经过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地址,手机与电脑在同一个网段的话,就能够直接用手机调试了。
node_modules目录中的内容很是大,若是在每一个工程下面都安装,会形成很大的浪费。能够将其放在各个工程的公共父级中,而在各个目录下面使用本身的gulpfile.js,config.js等配置文件。
例如工程都在public文件夹中,我就将node_modules放在public的平级。
npm(node package manager)nodejs的包管理器,用于node插件管理(包括安装、卸载、管理依赖等)
gulp赫然出如今npm的首页中。
命令提示符执行:
npm install <name> [-g] [--save-dev]
1. <name>:node插件名称。例:npm install gulp-less --save-dev
2. -g:全局安装。将会安装在C:\Users\Administrator\AppData\Roaming\npm,而且写入系统环境变量;
非全局安装:将会安装在当前定位目录;
全局安装能够经过命令行在任何地方调用它,本地安装将安装在定位目录的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下载全部须要的包。
由于npm安装插件是从国外服务器下载,受网络影响大,可能出现异常。
在国内推荐使用淘宝NPM镜像。“这是一个完整 npmjs.org 镜像,你能够用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽可能与官方服务同步”
安装指令以下:
npm install -g cnpm --registry=https://registry.npm.taobao.org
注意安装的时候会出现错误提示,你能够关闭命令窗口再打开,打入“cnpm -v”能够查看版本号。cnpm跟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
本文做者starof,因知识自己在变化,做者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/5194622.html有问题欢迎与我讨论,共同进步。
若是以为本文对您有帮助或者您心情好~能够支付宝(左)或微信(右)支持一下: