前段时间刚好在开发公司的首页,使用的是gulp工作流,gulp相对于webpack而言,配置简单,也更加直观(很符合直觉),日常开发一些静态页面、html5专题也足够,这里把遇到的坑与实践经验记录一下。

gulp api 非常简单,由5个方法组成:task run watch src dest,复杂的功能由插件的形式来实现。

  整体的工作流程就是 取出文件 => 各种处理一番 => 输出 

  task 创建任务,在命令行下可以输入 gulp test 来执行test的任务。
run 运行任务
watch 监听任务
src 设置需要处理的文件的路径,可以是多个文件以数组的形式[main.scss,vender.scss],也可以是正则表达式 /*/ .scss。
dest 设置生成文件的路径,一个任务可以有多个生成路径,一个可以输出未压缩的版本,另一个可以输出压缩后的版本。

  1、全局安装gulp

$ npm install -g gulp

  2、项目中安装gulp,新建gulpfile.js 配置文件

$ npm install --save-dev gulp 

  3、使用的gulp插件

  "gulp-autoprefixer": "^5.0.0", -- 自动补全浏览器前缀
  "gulp-file-include": "^2.0.1", -- 提供如后端模板功能
  "gulp-imagemin": "^4.1.0", -- 处理图片
  "gulp-minify-css": "^1.2.4", -- 压缩CSS
  "gulp-uglify": "^3.0.0", -- 压缩JS
  "imagemin-jpeg-recompress": "^5.1.0" -- 处理图片
  "browser-sync": "^2.24.5", --浏览器热刷新

  gulp 配合以上插件基本能够满足日常开发的需要,提供模板、文件刷新、图片压缩、热刷新等功能,唯一不爽的是静态资源更新以后不能自动复制到dist目录,要重启整个进程,勉强能够接受吧。

const gulp = require('gulp');
const uglify = require('gulp-uglify');
const minifyCSS = require('gulp-minify-css');
const imagemin = require('gulp-imagemin');
const imageminJpegRecompress = require('imagemin-jpeg-recompress');
const imageminOptipng = require('imagemin-optipng');
const fileinclude = require('gulp-file-include');
const autoprefixer = require('gulp-autoprefixer');
const browerSync = require('browser-sync').create(); const srcScript = './src/js/*.js';
const dstScript = './dist/js';
const srcCSS = './src/css/*.css';
const dstCSS = './dist/css';
const srcImage = './src/img/*.*';
const dstImage = './dist/img';
const srcHtml = './src/*.html';
const dstHtml = './dist'; //处理JS文件:压缩,然后换个名输出; //命令行使用gulp script启用此任务; gulp.task('script', function() { gulp.src(srcScript) .pipe(uglify()) .pipe(gulp.dest(dstScript)); }); //处理CSS文件:压缩,然后换个名输出; //命令行使用gulp css启用此任务; gulp.task('css', function() { gulp.src(srcCSS) .pipe(autoprefixer({
browsers: ['last 2 versions'],
cascade: false
})) .pipe(minifyCSS()) .pipe(gulp.dest(dstCSS)); }); //图片压缩任务,支持JPEG、PNG及GIF文件; //命令行使用gulp jpgmin启用此任务; gulp.task('imgmin', function() { var jpgmin = imageminJpegRecompress({ accurate: true,//高精度模式 quality: "high",//图像质量:low, medium, high and veryhigh; method: "smallfry",//网格优化:mpe, ssim, ms-ssim and smallfry; min: 70,//最低质量 loops: 0,//循环尝试次数, 默认为6; progressive: false,//基线优化 subsample: "default"//子采样:default, disable; }), pngmin = imageminOptipng({ optimizationLevel: 4 }); gulp.src(srcImage) .pipe(imagemin({ use: [jpgmin, pngmin] })) .pipe(gulp.dest(dstImage)); }); //使用gulp file-include 处理公用页面(头部、底部) //命令行使用gulp html启用此任务; gulp.task('html', function() { gulp.src(srcHtml)
.pipe(fileinclude({
prefix: '@@',
basepath: './src/tpl',
indent: true
}))
.pipe(gulp.dest(dstHtml)); }); //服务器任务:以dist文件夹为基础,启动服务器; //命令行使用gulp server启用此任务; gulp.task('server', function() { browerSync.init({ server: "./dist" }); }); //监控改动并自动刷新任务; //命令行使用gulp auto启动; gulp.task('auto', function() { gulp.watch(srcScript, ['script']); gulp.watch(srcCSS, ['css']); gulp.watch(srcImage, ['imgmin']); gulp.watch(srcHtml, ['html']); gulp.watch('./dist/**/*.*').on('change', browerSync.reload); }); //gulp默认任务(集体走一遍,然后开监控);
gulp.task('default', ['script', 'css', 'imgmin', 'html', 'server', 'auto']);

搭建gulp脚手架的更多相关文章

  1. 如何学习web开发环境搭建和脚手架

    Web前端的学习路线 第一阶段: HTML+CSS: HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础: Js基础教程.js内置对象常用方法.常见DO ...

  2. 0.react学习笔记-环境搭建与脚手架

    0.环境搭建 笔者使用的是deepin/mac两种系统,因为两个电脑经常切换用.环境搭建没什么区别. 0.1 node安装 按照node官网叙述安装 # Using Debian, as root c ...

  3. 搭建vue脚手架

    1.Node.js安装 1.1下载安装 在node.js 官网下载, 根据自己电脑系统安装,一直点下一步即可 1.2测试安装是否成功 Windows+R打开cmd窗口,输入node -v回车出现版本号 ...

  4. Vue2.0 搭建Vue脚手架(vue-cli)

    介绍 Vue.js是一套构建用户界面的渐进式框架.Vue 只关注视图层,采用自底向上增量开发的设计.Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. 阅读之前需要了解的知 ...

  5. 搭建vue脚手架---vue-cli

    vue-cli作为一款mvvm框架语言(vue)的脚手架,集成了webpack环境及主要依赖,对于项目的搭建.打包.维护管理等都非常方便快捷.我们在开发项目时尤其需要这样一个快速构建项目的工具. 以下 ...

  6. Vue入坑教程(一)——搭建vue-cli脚手架

    1. Vue简介 详细内容可以参考官网Vue.js 1)兼容性 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性.但它支持所有兼容 ECMA ...

  7. 从零搭建 vue-cli 脚手架

    前言: 用了几次 vue-cli 做 vue 项目,感觉没什么大问题,虽然也没有用 vue-router 和 vuex .但是心里一直有个梗,就是最初的目录生成和配置文件,一直没动过,也不知道具体原理 ...

  8. 怎么搭建vue-cli脚手架

    我们在使用vue搭建项目的时候,经常要使用到vue-cli. 一.安装node.js 去node官网下载并安装node,一直next就行. 等待安装完毕,输入node-v,如果输出版本号,那说明已经成 ...

  9. vue搭建cli脚手架环境(出现问题及解决,主要是node版本低)

    Vue 提供了一个官方的cli,为单页面应用 (SPA) 快速搭建繁杂的脚手架. 一.vue cli脚手架 脚手架通过webpack搭建开发环境 使用ES6语法 打包压缩js为一个文件 项目文件在环境 ...

随机推荐

  1. 【强化学习】python 实现 q-learning 例四(例二改写)

    将例二改写成面向对象模式,并加了环境! 不过更新环境的过程中,用到了清屏命令,play()的时候,会有点问题.learn()的时候可以勉强看到:P 0.效果图 1.完整代码 相对于例一,修改的地方: ...

  2. python中和生成器协程相关的yield from之最详最强解释,一看就懂(四)

    如果认真读过上文的朋友,应该已经明白了yield from实现的底层generator到caller的上传数据通道是什么了.本文重点讲yield from所实现的caller到coroutine的向下 ...

  3. synchronized和Lock的异同

    JAVA语言使用两种机制来实现堆某种共享资源的同步,synchronized和Lock.其中,synchronized使用Object对象本身的notify.wait.notifyAll调度机制,而l ...

  4. Ubuntu轻松编译openJDK

    花了三天在windows上搞openJDK,对bash本来就不熟,加上各种莫名依赖和脚本里的bug,身心俱疲.最后make all的时候产生一个莫名其妙的错误说什么有warning且-Werror置为 ...

  5. 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--自动路由篇(1/8)【route】

    文章目录 前情概要 在使用express框架开发的时候,每加一个请求,都在增加一条route请求规则,类似于下面的代码,很烦有木有! app.use('/myroute path', (req, re ...

  6. [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

    测试mysqld启动mysql server的时候,报如下错误: 2015-12-17 00:46:02 10785 [ERROR] Fatal error: Please read "Se ...

  7. 剑指offer:字符串的排列

    题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...

  8. 在Windows Server 2008R2中部署 AspNetCore

    1.部署时,先安装运行时 https://dotnet.microsoft.com/download 2.安装vc_redist.x64   https://www.microsoft.com/en- ...

  9. squid反向代理

    反向代理的作用是就爱那个网站中的静态自原本地化.也就是将一部分本应该有原是服务器处理的请求交给 Squid 缓存服务处理 编辑 Squid  服务程序的配置文件*(正向代理与反向代理不能同时使用,) ...

  10. octave基本指令3

    octave基本指令3 数据运算 >> a = [1 2; 3 4; 5 6]; >> b = [11 12; 13 14; 15 16]; >> c = [1 1 ...