前端自动化构建工具gulp使用
1. 全局安装 gulp:
$ npm install --global gulp
2. 作为项目的开发依赖(devDependencies)安装:
$ npm install --save-dev gulp
3. 在项目根目录下创建一个名为 package.json 的文件:
附上本人项目基本配置
{
"devDependencies": {
"concat": "0.0.1-security",
"gulp": "^3.9.1",
"gulp-autoprefixer": "^3.1.1",
"gulp-cache": "^0.4.5",
"gulp-clean": "^0.3.2",
"gulp-concat": "^2.6.1",
"gulp-connect": "^5.0.0",
"gulp-css-spriter": "^0.4.0",
"gulp-htmlmin": "^3.0.0",
"gulp-imagemin": "^3.1.1",
"gulp-jshint": "^2.0.4",
"gulp-less": "^3.3.0",
"gulp-livereload": "^3.8.1",
"gulp-minify-css": "^1.2.4",
"gulp-notify": "^3.0.0",
"gulp-rename": "^1.2.2",
"gulp-rev": "^7.1.2",
"gulp-rev-collector": "^1.1.1",
"gulp-ruby-sass": "^2.1.1",
"gulp-sass": "^3.1.0",
"gulp-sequence": "^0.4.6",
"gulp-sourcemaps": "^2.4.1",
"gulp-uglify": "^2.0.1",
"gulp-util": "^3.0.8",
"gulp-watch-path": "^0.1.0",
"gulp-webserver": "^0.9.1",
"htmlmin": "0.0.7",
"http-server": "^0.9.0",
"imagemin-pngquant": "^5.0.0",
"jshint": "^2.9.4",
"run-sequence": "^1.2.2",
"sass": "^0.5.0",
"stream-combiner2": "^1.1.1"
},
"dependencies": {
"browser-sync": "^2.18.8",
"gulp": "^3.9.1",
"gulp-imagemin": "^3.2.0",
"gulp-sass": "^3.1.0",
"gulp.spritesmith": "^6.4.0"
}
}
4. 项目目录结果:

5. 在项目根目录下创建一个名为 gulpfile.js 的文件:
var gulp = require('gulp'),
less = require('gulp-less'),
sass = require('gulp-sass'),
connect = require('gulp-connect'),
livereload = require('gulp-livereload'),
sourcemaps = require('gulp-sourcemaps'),
htmlmin = require('gulp-htmlmin'),
minifycss = require('gulp-minify-css'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename'),
jshint = require('gulp-jshint'),
notify = require('gulp-notify'),
imagemin = require('gulp-imagemin'),
pngquant = require('imagemin-pngquant'),
runSequence = require('run-sequence'),
rev = require('gulp-rev'),
cache = require('gulp-cache'),
autoprefixer = require('gulp-autoprefixer'),
clean = require('gulp-clean'),
revCollector = require('gulp-rev-collector'),
spritesmith = require('gulp.spritesmith');
//合并雪碧图
gulp.task('sprite', function() {
var spriteData = gulp.src('src/images/icon_*.png').pipe(spritesmith({
imgName: 'images/sprite.png',
cssName: 'sass/_sprite.scss',
cssFormat: 'scss'
}));
return spriteData.pipe(gulp.dest('src/'));
});
// less编译
gulp.task('less', function() {
gulp.src('src/less/*.less')
.pipe(sourcemaps.init())
.pipe(less())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('src/css/'));
});
// sass编译
gulp.task('sass', function() {
gulp.src('src/sass/*.scss')
.pipe(sourcemaps.init())
.pipe(sass())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('src/css/'));
});
//自动生成版本号,避免缓存
gulp.task('revImg', function() {
return gulp.src('src/images/*')
.pipe(rev())
.pipe(rev.manifest())
.pipe(gulp.dest('src/rev/img'));
});
gulp.task('revCss', function() {
return gulp.src('src/css/*.css')
.pipe(rev())
.pipe(rev.manifest())
.pipe(gulp.dest('src/rev/css'));
});
gulp.task('revJs', function() {
return gulp.src('src/js/*.js')
.pipe(rev())
.pipe(rev.manifest())
.pipe(gulp.dest('src/rev/js'));
});
//Html替换img、css、js文件版本
gulp.task('revHtml', function() {
return gulp.src(['src/rev/**/*.json', 'src/html/*.html'])
.pipe(revCollector())
.pipe(gulp.dest('src/html'));
});
//scss替换img文件版本
gulp.task('revScss', function() {
return gulp.src(['src/rev/**/*.json', 'src/sass/*.scss'])
.pipe(revCollector())
.pipe(gulp.dest('src/sass'));
});
//开发构建
gulp.task('dev', function(done) {
condition = false;
runSequence(
['revImg'], ['revCss'], ['revScss'], ['revJs'], ['revHtml'],
done);
});
//css合并处理
// gulp.task('minifycss',function(){
// return gulp.src('css/*.css') //设置css
// .pipe(concat('order_query.css')) //合并css文件到"order_query"
// .pipe(gulp.dest('styles')) //设置输出路径
// .pipe(rename({suffix:'.min'})) //修改文件名
// .pipe(minifycss()) //压缩文件
// .pipe(gulp.dest('styles')) //输出文件目录
// .pipe(notify({message:'css task ok'})); //提示成功
// });
// //JS合并处理
// gulp.task('minifyjs',function(){
// return gulp.src('js/*.js') //选择合并的JS
// .pipe(concat('order_query.js')) //合并js
// .pipe(gulp.dest('dist/js')) //输出
// .pipe(rename({suffix:'.min'})) //重命名
// .pipe(uglify()) //压缩
// .pipe(gulp.dest('dist/js')) //输出
// .pipe(notify({message:"js task ok"})); //提示
// });
//压缩html
gulp.task('html', function() {
var options = {
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input checked />
removeEmptyAttributes: true, //删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true, //删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true, //删除<style>和<link>的type="text/css"
minifyJS: true, //压缩页面JS
minifyCSS: true //压缩页面CSS
};
gulp.src('src/html/*.html')
.pipe(htmlmin(options))
.pipe(gulp.dest('dist/html'));
});
// JS hint 检查
// gulp.task('jshint', function() {
// gulp.src('src/js/*.js')
// .pipe(jshint())
// .pipe(jshint.reporter('default'));
// });
//压缩js
gulp.task('uglifyjs', function() {
gulp.src('src/js/*.js')
.pipe(uglify())
.pipe(gulp.dest('dist/js'))
});
//压缩css
gulp.task('minifycss', function() {
gulp.src('src/css/*.css')
.pipe(minifycss())
.pipe(gulp.dest('dist/css'))
});
//压缩images
gulp.task('imagemin', function() {
gulp.src('src/images/*.{png,jpg,gif,ico}')
.pipe(imagemin({
progressive: true,
svgoPlugins: [{ removeViewBox: false }], //不要移除svg的viewbox属性
use: [pngquant()] //使用pngquant深度压缩png图片的imagemin插件
}))
.pipe(gulp.dest('dist/images'));
});
//创建本地服务器
gulp.task('webserver', function() {
connect.server({
livereload: true
});
});
//清空项目输出目录
gulp.task('clean', function() {
return gulp.src(['dist/js/', 'dist/css/', 'dist/html/', 'dist/images/'], { read: false })
.pipe(clean());
});
//监控文件变化
gulp.task('watch', function() {
gulp.watch('src/less/*.less', ['less']);
gulp.watch('src/sass/*.scss', ['sass']);
gulp.watch('src/html/*.html', ['html']);
gulp.watch('src/js/*.js', ['uglifyjs']);
gulp.watch('src/css/*.css', ['minifycss']);
gulp.watch('src/images/*.*', ['imagemin']);
gulp.watch('src/images/icon_*.png', ['sprite']);
});
// 将你的默认的任务代码放在这
gulp.task('default', ['clean'], function() {
gulp.start('less', 'sass', 'uglifyjs', 'minifycss', 'html', 'imagemin', 'dev', 'watch', 'webserver', "sprite");
// gulp.start('less', 'sass', 'uglifyjs', 'minifycss', 'html', 'imagemin', 'dev', 'watch', 'webserver');
});
6. 运行 gulp:
$ gulp
前端自动化构建工具gulp使用的更多相关文章
- 前端自动化构建工具gulp的使用总结
前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...
- 前端自动化构建工具——gulp
gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...
- 前端自动化构建工具 Gulp 使用
一个月没写博客了,今天有时间,就写个gulp的入门使用吧.. 简介:gulp是一个前端自动化构建工具,可以实现代码的检查.压缩.合并……等等,gulp是基于Node.js的自动任务运行器 一.安装No ...
- 前端自动化构建工具--Gulp&&Webpack
前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...
- 前端自动化构建工具 gulp 学习笔记 一、
一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...
- 前端自动化构建工具——gulp环境搭建教程
gulp是前端工程化的工具,它可以对html,css,js等代码和图片进行压缩,也可以对sass和less等预处理语言进行编译,代码部署.gulp学起来简单,用起来方便,大大提高我们工作效率. 这里可 ...
- 前端自动化构建工具-gulp
gulp 和grunt这两个是我知道的自动构建工具,但是说实话都没在项目中用过,不太清楚自动化构建是什么意思, 1.grunt和gulp有什么相同点和不同点? (1).易于使用:采用代码优于配置策略, ...
- 前端自动化构建工具gulp记录
一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...
- 前端自动化构建工具gulp
1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp: npm install -g gulp 全局安装gulp后,还需要在每个要使用gulp的项目中都单独安装一次 ...
随机推荐
- iOS: 学习笔记, Swift操作符定义
Swift操作符能够自行定义, 仅仅须要加上简单的标志符就可以. @infix 中置运算. 如+,-,*,/运算 @prefix 前置运算. 如- @postfix 后置运算. a++, a-- @a ...
- linux系统下用到的小知识点积累
preface:在ubuntu下做事情,在终端下执行一些命令.或者在vim里面做一些操作.自然而然须要用到一些小知识点,没有怎么系统地看<鸟哥的菜>,基本上是遇到了什么问题想要实现什么功能 ...
- 【http代理报文】自己开发HTTP代理工具,不限语种。
我们知道通过修改浏览器设置可以使用代理访问网页,其实这个操作就是修改了每次的HTTP头. 工作中,我们难免需要通过TCP/IP协议发送HTTP报文来直接请求网页内容(比如爬虫工具),有同学问如何通过H ...
- 行政区划代码(SQL版本)2018年8月
表结构:(新建好表字段即可直接copy insert SQL语句) SQL语句: INSERT INTO z_regioncode(regioncode,regionname,pcode) VALUE ...
- hdu 1512 Monkey King —— 左偏树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1512 很简单的左偏树: 但突然对 rt 的关系感到混乱,改了半天才弄对: 注意是多组数据! #includ ...
- PCB 规则引擎之脚本语言JavaScript应用评测
世界上没有好做的软件,觉得好做,只是你的系统简单而已,而不是哪个行业简单,特别像我们PCB制造企业务逻辑的很复杂的,仅仅靠决策树中的每个节点布置决策逻辑是不能满足要求的,所以我们在制作PCB规则引擎必 ...
- 【TODO】Ruby Range类
创建: 2017/10/28 Range类 ...
- AngularJS过滤器filter-保留小数-渲染页面-小数点-$filter
AngularJS 保留小数 默认是保留3位 固定的套路是 {{deom | number:4}} 意思就是保留小数点 的后四位 在渲染页面的时候 加入这儿个代码 用来精确浮点数,指定小数点 ...
- [Swift通天遁地]二、表格表单-(2)创建右侧带有索引的UITableView(表单视图)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Java高质量20问
问题一:在多线程环境中使用HashMap会有什么问题?在什么情况下使用get()方法会产生无限循环? HashMap本身没有什么问题,有没有问题取决于你是如何使用它的.比如,你在一个线程里初始化了一个 ...