前端自动化构建工具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学习之旅---指针也不难
1.认识指针 #include <stdio.h> //基本数据类型作为函数參数传递是值传递 //void moveFront(int x ,int y) //{ // x = x + 2 ...
- C#文件运行类的VB.NET版本号
主要差别在于事件处理要採用AddHandler和RemoveHandler,以及AddressOf三个keyword,其他基本一样. VB的操作稍微繁琐.但仍然能够实现.
- javascript 变量声明 和 作用域
变量的声明 1.变量声明具有提升机制,Javascript在执行时,会把所有的声明都提升到当前作用域前面. 先看一下下面的例子: (function(){ alert(b)//b is not def ...
- 【bzoj1196】[HNOI2006]公路修建问题
二分答案 验证有一种贪心的思想,就是如果这条路的c1比二分的值还小,那就要果断选择一级公路. 搜过一遍后,如果可供选择的一级公路小于k,就可以直接返回否了. 接下来继续选择,如果可以选到n-1条路,就 ...
- 技术架构model
- Netlink通信机制【转】
本文转载自:http://www.cnblogs.com/wenqiang/p/6306727.html 一.什么是Netlink通信机制 Netlink套接字是用以实现用户进程与内核进程通信的一种 ...
- codeforce 1073E. Segment Sum
看到这个就是数位DP了,然而细节极多,对于i=1状态直接判了,还有最后一位直接算了 设f[i][zt][0/1]表示枚举到第i位,用了那些数字,是否有前导0(前导0不计入数字,否则就不知道后面有没有0 ...
- 洛谷P1045 麦森数
题目描述 形如2^{P}-12 P −1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12 P −1不一定也是素数.到1998年底,人们已找 ...
- astgo常见问题(FAQ)知识库
Q:为什么我在astgo 的一些列表页面看不到右侧顶端的高级功能菜单?R:因为你没有先选择代理商,这些操作都是针对于某个代理商才可以操作的! Q:为什么我无法给astgo 的代理商充值?R:因为你登录 ...
- Java开源JSP标签库
01displytag 与Struts结合使用最出名的一个tag主要是显示表格数据很漂亮.完善. 02cewolf tag 用来在web上显示复杂图形报表的一个jsp tag. 03Loading T ...