gulp 使用案例
1、gulp 配置:
// 引入 gulp
var gulp = require('gulp'); var watch = require('gulp-watch'), //导入所有gulp需要的模块
spriter = require('gulp-css-spriter'),
spritesmith = require('gulp.spritesmith'),
imagemin = require('gulp-imagemin'),
pngquant = require("imagemin-pngquant"),
base64 = require('gulp-base64'),
autoprefixer = require('gulp-autoprefixer'),
rename = require("gulp-rename"),
cssmin = require('gulp-cssmin'),
connect = require('gulp-connect'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
less = require('gulp-less'),
sass = require('gulp-sass'),
uncss = require('gulp-uncss-sp'),
del = require('del'),
watchFile = (w_path, w_task) => {
var chokidar = require('chokidar');
chokidar.watch(w_path, { ignored: /[\/\\]\./ }).on('all', (event, path) => {
console.log(event, path, 'info');
if (w_task == 'scss' && event == 'unlink') {
del(['./css/*.css'])
}
gulp.run(w_task);
});
}; gulp.task('server', function() { //创建server
connect.server({
root: './',
port: 8088,
livereload: true
});
}); // 编译Sass
gulp.task('scss', function() { //创建任务
gulp.src(['./scss/*.scss'])
.pipe(sass().on('error', sass.logError))
.pipe(autoprefixer({
browsers: ['last 6 Chrome versions', 'last 3 Safari versions', 'iOS >= 5', 'Android >= 4.0'],
cascade: true, //是否美化属性值 默认:true 像这样:
//-webkit-transform: rotate(45deg);
// transform: rotate(45deg);
remove: true //是否去掉不必要的前缀 默认:true
}))
.pipe(cssmin())
.pipe(gulp.dest('./css'))
.pipe(connect.reload());
}); gulp.task('less', function() {
gulp.src(['./less/*.less'])
.pipe(less())
.pipe(autoprefixer({
browsers: ['last 6 Chrome versions', 'last 4 Explorer versions', 'Firefox ESR', 'last 2 Explorer versions', 'iOS >= 5', 'Android >= 4.0', '> 5%'],
cascade: true, //是否美化属性值 默认:true 像这样:
//-webkit-transform: rotate(45deg);
// transform: rotate(45deg);
remove: true //是否去掉不必要的前缀 默认:true
}))
.pipe(cssmin())
.pipe(gulp.dest('./css'))
.pipe(connect.reload());
}); gulp.task('uncss', function() {
return gulp.src('css/*.css')
.pipe(uncss({
html: ['*.html']
}))
.pipe(gulp.dest('./css'));
}); gulp.task('cssmin', function() {
gulp.src(['./css/*.css'])
.pipe(cssmin())
.pipe(gulp.dest('./css'));
}); // 监听任务
gulp.task('watch', function() {
/* gulp.watch('*.html', ['html']); */ // 监听根目录下所有.html文件
gulp.watch('./scss/*.scss', ['scss']);
});
gulp.task('watchIcon', function() {
watchFile('./img/icon/', 'icon2')
});
gulp.task('watchScss', function() {
watchFile('./scss/', 'scss')
}); // 默认任务
gulp.task('default', ['server', 'watchIcon', 'watchScss']); gulp.task('sprite', function() { var timestamp = +new Date();
//需要自动合并雪碧图的样式文件
return gulp.src('./scss/*.scss')
.pipe(spriter({
// 生成的spriter的位置
'spriteSheet': './img/' + timestamp + '.png',
// 生成样式文件图片引用地址的路径
// 如下将生产:backgound:url(../images/sprite20324232.png)
'pathToSpriteSheetFromCSS': '../img/' + timestamp + '.png'
}))
//产出路径
.pipe(gulp.dest('./test'));
}); gulp.task('icon2', function() {
return gulp.src('./img/icon/*.png') //需要合并的图片地址
.pipe(spritesmith({
imgName: 'img/sprite.png', //保存合并后图片的地址
cssName: 'scss/comm/icon.scss', //保存合并后对于css样式的地址
padding: 20, //合并时两个图片的间距
algorithm: 'binary-tree', //注释1
cssTemplate: function(data) {
var arr = [];
data.sprites.forEach(function(sprite) {
var $width = parseInt(sprite.px.width);
var $height = parseInt(sprite.px.height);
var $ofx = parseInt(sprite.px.offset_x);
var $ofy = parseInt(sprite.px.offset_y);
var $tw = sprite.total_width;
var $th = sprite.total_height;
arr.push(".icon-" + sprite.name +
"{" +
"background-image: url(" + sprite.escaped_image + ");" +
"background-position: " + $ofx + "px " + $ofy + "px;" +
"width:" + $width + "px;" +
"height:" + $height + "px;" +
"background-size:" + $tw + "px " + $th + "px;" +
"background-repeat:" + "no-repeat;" +
"display:" + "inline-block;" +
"}\n");
});
return arr.join("");
}
}))
.pipe(gulp.dest('./'));
});
gulp.task('imagemin', function() {
return gulp.src('./img/ft/*.{png,jpg,gif,ico}')
.pipe(imagemin({
optimizationLevel: 5,
progressive: true,
multipass: true,
use: [pngquant({
quality: '50-70'
})]
}))
.pipe(gulp.dest('./img/'))
}); gulp.task('base', ['sass'], function() {
return gulp.src('./scss/_reset.scss')
.pipe(base64({
baseDir: 'xgou',
extensions: ['png'],
maxImageSize: 20 * 1024,
debug: false
}))
.pipe(gulp.dest('./scss/'));
});
2、package.json:
{
"devDependencies": {
"del": "^2.2.2",
"gulp": "^3.9.1",
"gulp-autoprefixer": "*",
"gulp-base64": "*",
"gulp-concat": "*",
"gulp-connect": "*",
"gulp-css-spriter": "*",
"gulp-cssmin": "*",
"gulp-imagemin": "*",
"gulp-less": "*",
"gulp-livereload": "*",
"gulp-rename": "*",
"gulp-sass": "*",
"gulp-uglify": "*",
"gulp-uncss-sp": "^0.0.1",
"gulp-watch": "*",
"gulp-webserver": "*",
"gulp.spritesmith": "*",
"imagemin-pngquant": "*",
"node-sass": "*",
"spritesmith": "*"
}
}
gulp 使用案例的更多相关文章
- gulp初探
很多人都在用grunt和gulp,我现在连github都不用..为了说自己是个前端,还是搞搞gulp吧 nodejs很多人都会安装,这个不是问题 npm模块现在好像是自带的..我忘了.. 先全局安装下 ...
- gulp 编译es6 react 教程 案例 配置
1.gulp基本配置: var gulp = require('gulp'), watch = require('gulp-watch'), babel = require('gulp-babel') ...
- Yeoman 官网教学案例:使用 Yeoman 构建 WebApp
STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...
- gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题
问题描述: 在使用gulp当中,自动生成的node_modules文件夹,因为文件目录层级太深,无法系统删除,用360粉碎工具也报错 解决方法: 使用npm中的插件rimraf,专门用于删除的模块插件 ...
- gulp基本介绍
一.gulp是什么 gulp就是用来机械化的完成重复性质(如less->css:js.css压缩:js混淆)的工作:gulp的机制就是将重复工作抽象成一个个的任务. 二.gulp使用 a.首先确 ...
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- gulp之静态资源防缓存处理
最近,因为校友网项目开始有些规模了.开始就要考虑对静态资源进行工程自动化的管理.一讲到前端的自动化工具,大家或许都会想到Grunt,Gulp,或者百度的FIS.这三个都有各自的特点,大家可以依据自己的 ...
- gulp分享文档
Grunt--I/O操作: 读取A → A.a() → 写出A → 读取A → A.b() → 写出A; gulp--数据流:读取A → A.a() → A.b() → 写出A. Part① 构建gu ...
- Gulp安装流程、使用方法及cmd常用命令导览
Gulp安装流程.使用方法及CMD常用命令导览 来自前端小白的gulp及周边知识学习总结 一.名词介绍: Npm--node包管理工具 一开始我不理解,包管理工具是什么鬼.后来用到的gulp也好,gu ...
随机推荐
- 用IBM MQ中间件开发碰到的MQRC_NOT_AUTHORIZED(2035)问题
我在一台工作站上面部署了MQ服务器,在MQ服务器中我建立了队列管理器MQ_TEST,在该队列管理器中我建立了一个本地队列MQ_Q以及一个服务器连接通道MQ_C,MQ_C中的MCA用户标识默认为空.同时 ...
- oracle-sql内置函数
函数 oracle 自定义函数入门 主题:ORACLE函数大全 ############################### set operators UNION, UNION ALL, INT ...
- direct3d
DirectX for .Net procedure 1, install DXSDK https://www.microsoft.com/en-us/download/details.aspx?i ...
- Spring整合Hibernate(转)
概述 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory 2.让Hibernate使用上Spring的声明式事务 整合步骤 整合前准 ...
- 一个基于netty的websocket聊天demo
这里,仅仅是一个demo,模拟客户基于浏览器咨询卖家问题的场景,但是,这里的demo中,卖家不是人,是基于netty的程序(我就叫你uglyRobot吧),自动回复了客户问的问题. 项目特点如下: 1 ...
- web前端性能调优(一)
最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...
- FastDFS配置 ***
FastDFS配置 docker pull delron/fastdfs docker run -dti --network=host --restart=always --name tracker ...
- DateGridView标题列头添加复选框
第一:添加列标题时,添加两个空格——用于显示复选框: 第二:实现列标题添加复选框,代码如下: private void AddCheckeBoxToDGVHeader(DataGridView dgv ...
- Azure PowerShell (13) 批量设置Azure ARM Network Security Group (NSG)
<Windows Azure Platform 系列文章目录> 刚刚在帮助一个合作伙伴研究需求,他们的虚拟机全面的网络安全组(Network Security Group, NSG)会经常 ...
- debian下erlang新版本安装
debian下的erlang版本太老 安装kerl,并且在profile内添加到PATH curl -o ~/dev/erlang/kerl https://raw.githubusercontent ...