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使用的更多相关文章

  1. 前端自动化构建工具gulp的使用总结

    前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...

  2. 前端自动化构建工具——gulp

    gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到 ...

  3. 前端自动化构建工具 Gulp 使用

    一个月没写博客了,今天有时间,就写个gulp的入门使用吧.. 简介:gulp是一个前端自动化构建工具,可以实现代码的检查.压缩.合并……等等,gulp是基于Node.js的自动任务运行器 一.安装No ...

  4. 前端自动化构建工具--Gulp&&Webpack

    前端构建工具的作用可以认为是对源项目文件或资源进行文件级处理,将文件或资源处理成需要的最佳输出结构和形式. 在处理过程中,我们可以对文件进行模块化引入.依赖分析.资源合并.压缩优化.文件嵌入.路径替换 ...

  5. 前端自动化构建工具 gulp 学习笔记 一、

    一.我对gulp的初期理解 是一种前端辅助开发工具 可以帮你把js,css,img等文件 合并.压缩,图片好像是合并为精灵图,合并为精灵图之后,还会生成一个css样式表. 官方解说是:基于流的自动化构 ...

  6. 前端自动化构建工具——gulp环境搭建教程

    gulp是前端工程化的工具,它可以对html,css,js等代码和图片进行压缩,也可以对sass和less等预处理语言进行编译,代码部署.gulp学起来简单,用起来方便,大大提高我们工作效率. 这里可 ...

  7. 前端自动化构建工具-gulp

    gulp 和grunt这两个是我知道的自动构建工具,但是说实话都没在项目中用过,不太清楚自动化构建是什么意思, 1.grunt和gulp有什么相同点和不同点? (1).易于使用:采用代码优于配置策略, ...

  8. 前端自动化构建工具gulp记录

    一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...

  9. 前端自动化构建工具gulp

    1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp: npm install -g gulp 全局安装gulp后,还需要在每个要使用gulp的项目中都单独安装一次 ...

随机推荐

  1. 《从零開始学Swift》学习笔记(Day 55)——使用try?和try!差别

    原创文章.欢迎转载.转载请注明:关东升的博客   在使用try进行错误处理的时候,常常会看到try后面跟有问号(? )或感叹号(!),他们有什么差别呢? 1.使用try? try?会将错误转换为可选值 ...

  2. Python3基础(十) 类的初印象

    Python是一种面向对象的脚本语言,所以它也提供了面向对象编程的所有基本特征:允许多继承的类继承机制.派生类可以重写它父类的任何方法.一个方法可以调用父类中同名的方法.对象可以包含任意数量和类型的数 ...

  3. ganglia收集hbase的metrics

    Ganglia 是 UC Berkeley 发起的一个开源监视项目,设计用于測量数以千计的节点.每台计算机都执行一个收集和发送度量数据(如处理器速度.内存使用量等)的名为 gmond 的守护进程.它将 ...

  4. JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)

    Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中.用户能够通过指定数据类型和标识符来声明变量.其基本的语法为: DataType identifier; 或 Dat ...

  5. ajax接收处理json格式数据

    ajax在前后端的交互中应用非常广泛,通过请求后台接口接收处理json格式数据展现在前端页面. 下面我们来简单用 ajax在本地做一个接收并处理json的小例子 首先我们要新建一个叫做data的jso ...

  6. P3399 丝绸之路(线性二维dp)

    P3399 丝绸之路 题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚. ...

  7. Java并发编程系列之Semaphore详解

    简单介绍 我们以饭店为例,假设饭店只有三个座位,一开始三个座位都是空的.这时如果同时来了三个客人,服务员人允许他们进去用餐,然后对外说暂无座位.后来的客人必须在门口等待,直到有客人离开.这时,如果有一 ...

  8. 自动调整速率的Actor设计模式

    问题背景 与数据库或者存储系统交互是所有应用软件都必不可少的功能之一,akka开发的系统也不例外.但akka特殊的地方在于,会尽可能的将所有的功能都设计成异步的,以避免Actor阻塞,然而无法避免IO ...

  9. ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/pod

    因为突然要用到cocospod,突然发现在使用pod install的时候出现 -bash: pod: command not found 我去-不知道为什么,然后我就想重新安装下cocospod,在 ...

  10. ACM_堆箱子咯(栈)

    堆箱子咯 Time Limit: 2000/1000ms (Java/Others) Problem Description: 双十一大家都在买买买,可忙坏了快递小哥了.zl和皮卡鸡在大伙在剁手的时候 ...