提示:路径中不允许出现中文,否则scss编译会出错,大概。

按照惯例,先检查一下Node.js、npm(cnpm)、gulp的版本号

1.新建package.json

我们可以通过手动新建这个配置文件  也可以通过执行 npm init

package.json是基于nodejs项目必不可少的配置文件,它是存放在项目根目录的普通json文件

2.通过更改package.json来安装各种需要的插件,而我的方案则是

 {
"name": "xueweijie",
"version": "1.0.0",
"description": "this is a test",
"main": "gulpfile.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "xueweijie&gulp",
"license": "ISC",
"devDependencies": { //开发环境 也就是说打包之后还需要用到的插件
"gulp": "^3.9.1",
"gulp-autoprefixer": "^3.1.1", //为css自动增加前缀
"gulp-cache": "^0.4.5", //清除缓存
"gulp-connect": "^5.0.0" //浏览器自动刷新
},
"dependencies": { //生成环境
"gulp-htmlmin": "^3.0.0", //编译html
"gulp-imagemin": "^3.3.0", //编译images
"gulp-minify-css": "^1.2.4", //编译css
"gulp-concat": "^2.6.0", //按顺序打包js(让多个js生成一个js)
"gulp-uglify": "^2.1.2", //编译js
"gulp-file-include": "^0.13.7", //模板复用
"gulp-sass": "^3.1.0" //编译sass
}
}

以gulp-cache举例  你也可以通过自己 npm install gulp-cache --save-dev

以gulp-htmlmin举例  你也可以通过 npm install gulp-htmlmin --save

而dev就是让它们在生成环境还是开发环境的区别

注意: 去掉注释!

3.通过 npm install  安装node_modules  (太长就不放了)

 

4.在目录中新建一个gulpfile.js

5.开始配置gulpfile.js

 var gulp = require('gulp');

 // 浏览器自动刷新
var connect = require('gulp-connect');
gulp.task('connect', function() {
connect.server({
livereload: true
});
}); // 编译html
var htmlmin = require('gulp-htmlmin');
var fileinclude = require('gulp-file-include');
var options = {
removeComments: true, //清除HTML注释
collapseWhitespace: true, //压缩HTML
collapseBooleanAttributes: true, //省略布尔属性的值 <input checked="true"/> ==> <input />
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.task('html', function () {
return gulp.src('./src/html/**/*.html') //生产路径
.pipe(htmlmin(options)) //压缩html
.pipe(fileinclude({ //模板复用
prefix: '@@',
basepath: '@file'
}))
.pipe(gulp.dest('dist/html')) //打包路径
.pipe(connect.reload());
}); // 编译css
var cssmin = require('gulp-minify-css');
var autoprefixer = require('gulp-autoprefixer'); //自动增加前缀
var sass = require('gulp-sass');
gulp.task('css', function () {
return gulp.src('src/css/**/*.scss') //生成路径
.pipe(autoprefixer({
browsers: ['last 2 versions', 'Android >= 4.0'],
cascade: true, //是否美化属性值 默认:true 像这样:
//-webkit-transform: rotate(45deg);
// transform: rotate(45deg);
remove:true //是否去掉不必要的前缀 默认:true
}))
.pipe(sass())
.pipe(cssmin({
advanced: false,//类型:Boolean 默认:true [是否开启高级优化(合并选择器等)]
compatibility: '*',//保留ie7及以下兼容写法 类型:String 默认:''or'*' [启用兼容模式; 'ie7':IE7兼容模式,'ie8':IE8兼容模式,'*':IE9+兼容模式]
keepBreaks: true,//类型:Boolean 默认:false [是否保留换行]
keepSpecialComments: '*'
//保留所有特殊前缀 当你用autoprefixer生成的浏览器前缀,如果不加这个参数,有可能将会删除你的部分前缀
}))
.pipe(gulp.dest('dist/css'))
.pipe(connect.reload());
}); // 编译js
var uglify = require('gulp-uglify');
gulp.task('js', function () {
return gulp.src('src/js/**/*.js') //生产路径
.pipe(uglify({
mangle: {except: ['require' ,'exports' ,'module' ,'$']},
compress: true,//类型:Boolean 默认:true 是否完全压缩
preserveComments: 'all' //保留所有注释
}))
.pipe(gulp.dest('dist/js')) //打包路径
.pipe(connect.reload());
}); // 编译 images
var imagemin = require('gulp-imagemin');
var cache = require('gulp-cache');
gulp.task('image', function () {
return gulp.src('src/images/*.{png,jpg,gif,ico}') //生成路径
.pipe(cache(imagemin({
optimizationLevel: , //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true //类型:Boolean 默认:false 多次优化svg直到完全优化
})))
.pipe(gulp.dest('dist/images')); //打包路径
}); // 编译 copy
var concat = require('gulp-concat');
gulp.task('copy', function() { //静态资源
return gulp.src('src/lib/*.js')
.pipe(concat('all.js')) //打包成all.js
.pipe(gulp.dest('dist/lib'))
}); //编译 iconfont
gulp.task('iconFont', function() {
return gulp.src('src/iconfont/*')
.pipe(gulp.dest('dist/iconfont'))
}); //实时监听
gulp.task('watch', function () { gulp.watch(['./src/html/**/*.html'], ['html']); gulp.watch(['./src/css/**/*.scss'], ['css']); gulp.watch(['./src/js/**/*.js'], ['js']); }); gulp.task('default', ['connect', 'watch','html','css','js','image','copy','iconFont']);

6.建立src目录,开始搭建目录结构

首先将公共部分的css跟js引入页面,lib为静态资源,通过顺序用上述插件打包成一个js,再以采用一个页面一个css,一个页面一个js的方法进行编写

模板复用这一块通过新建一个后缀名为inc的文件,再在后缀名为html里引入即可,路径要把控好

7.打包上线 gulp 打包  gulp watch  实时监听

dist即为打包之后的项目

从两者之间的大小即可看到效果, 由于我做的image这一块优化不深,推荐一个深度优化图片的网站(免费!!) https://tinypng.com/  这样项目的大小会变得更小一点。

通过gulp watch既可以实时监听,在src里改变了什么,浏览器就可以直接看到。

gulp基础使用及进阶的更多相关文章

  1. gulp基础操作实践

    按照gulp中文文档对gulp基础操作的一些实践练习,记录以防忘掉. 一,选择并输出文件:gulp.src(globs[,options]) eg:gulp.src('src/less/index.l ...

  2. 十三. Python基础(13)--生成器进阶

    十三. Python基础(13)--生成器进阶 1 ● send()方法 generator.send(value) Resumes the execution, and "sends&qu ...

  3. python基础篇之进阶

    python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython  使用c解释器生产 ...

  4. 万门大学Python零基础10天进阶班视频教程

    点击了解更多Python课程>>> 万门大学Python零基础10天进阶班视频教程 课程简介: 旨在通过两周的学习,让学生不仅能掌握python编程基础从而进行计算机程序的开发, 还 ...

  5. Python知识(1)----基础入门和进阶总结。

    今天把Python的语法过了一遍,学习了慕课网上的教程,简单易懂,1个小时就可以入门Python了.Python有两个主要的版本,Python2.7,Python3.5,后面的版本,改动较大,编写的程 ...

  6. Python基础—面向对象(进阶篇)

    通过上一篇博客我们已经对面向对象有所了解,下面我们先回顾一下上篇文章介绍的内容: 上篇博客地址:http://www.cnblogs.com/phennry/p/5606718.html 面向对象是一 ...

  7. 一凡老师亲录视频,Python从零基础到高级进阶带你飞

    如需Q群交流 群:893694563 不定时更新2-3节视频 零基础学生请点击 Python基础入门视频 如果你刚初入测试行业 如果你刚转入到测试行业 如果你想学习Python,学习自动化,搭建自动化 ...

  8. Gulp基础

    1.什么是gulp? gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. 2.为什么使用gulp? gulp不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工 ...

  9. Python之路,Day8 - Python基础 面向对象高级进阶与socket基础

    类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...

随机推荐

  1. VC+++ 操作word

    最近完成了一个使用VC++ 操作word生成扫描报告的功能,在这里将过程记录下来,开发环境为visual studio 2008 导入接口 首先在创建的MFC项目中引入word相关组件 右键点击 项目 ...

  2. Redis实现分布式锁2

    redisTemplate实现分布式锁 /** * 分布式锁-加锁 * @param key * @param value 当前时间+超时时间 System.currentTimeMillis()+t ...

  3. 原型链继承中的prototype、__proto__和constructor的关系

    前不久写了有关原型链中prototype.__proto__和constructor的关系的理解,这篇文章说说在原型链继承中的prototype.__proto__和constructor的关系. 通 ...

  4. git revert后导致合并代码丢失

    起因 我有一个开发分支antd3.x和一个主分支develop,我在合并antd3.x到develop的时候发现有些修改没有合并进来. 查找问题 然后就去网上查,发现这篇文章<git合并丢失代码 ...

  5. ThreeJS模拟人沿着路径运动-路径箭头使用纹理offset偏移

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Node.js 学习笔记(一)--------- Node.js的认识和Linux部署

    Node.js 一.Node.js 简介  简单的说 Node.js 就是运行在服务端的可以解析并运行 JavaScript 脚本的软件. Node.js 是一个基于Chrome JavaScript ...

  7. 【javascript】javascript设计模式之工厂模式

    1.要解决的问题 2.如何实现 3.与构造函数的区别 4.总结 1.要解决的问题 工厂模式通常用于重复创建相似对象,提供动态创建对象的接口. 2.工厂模式最为设计模式中构造模式之一,通常在类或类的静态 ...

  8. IOS地理信息使用

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...

  9. AndroidStudio中logcat不输出信息

    2017年11月27日,记住这个日子.今天第一次感觉到被批评了,由于自己技术知识储备不足导致今天的外出工作等于浪费时间.正式因为这个logcat不输出信息的问题,前几回不输出信息了我就从新启动了开发工 ...

  10. 统计nginx日志

    .根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l .统计访问URL统计PV awk '{print $7}' access.l ...