转自:https://www.jianshu.com/p/2549c793bb27

gulp

gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。
gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。通过本文,我们将学习如何使用Gulp来改变开发流程,从而使开发更加快速高效。
gulp 和 grunt 非常类似,但相比于 grunt 的频繁 IO 操作,gulp 的流操作,能更快地更便捷地完成构建工作。

webpack

Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。

**当然个人还是喜欢webpack的模块化优秀

废话不多说现在开始gulp之旅

初始化项目(此处已经认为node环境已经安装)

建立文件夹 名字自己随便取 比如 gulpText,然后输入以下命令

$ cd  gulpText
$ mkdir images //建立存放图片文件夹
$ mkdir src // 存放 js 以及css
$ mkdir index.html //主页
$ mkdir gulpfile.js //编写gulp 任务文件
$ mkdir mock //mock数据

然后输入以下命令 然后一路点下去生成json文件

 $npm init

打开json文件看到这样的

 
1474889102536.png

全局安装gulp以便我们运行gulp进行打包等操作

$npm install gulp -g

如果感觉npm安装比较慢可以切换至cnpm下载,代码如下

$npm install cnpm -g

安装gulp包,方便我们引用gulp

$npm install gulp

成功截图

 
1474889517162.png

编写gulp任务

引入 gulp

//引入gulp
var gulp = require('gulp');

拷贝Index.html

//copyhtml
gulp.task('copy-index',function () {
gulp.src('./index.html')
.pipe(gulp.dest('./build'));
})

执行命令

  $ gulp copy-index

1474890843877.png](//upload-images.jianshu.io/upload_images/2905209-c00d640651bde279.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 
1474890828271.png

拷贝images


//copy images
gulp.task('copy-images',function () {
gulp.src('./images**/*')
.pipe(gulp.dest('./build/'));
})

执行命令

  $ gulp copy-iamges
 
1474891076408.png
 
1474891039689.png

css预处理

现在我们在src目录里创建文件styles放我们的scss代码,需要把scss代码编译到/build/prd/styles/下

$ cd src
$ mkdir styles
$ cd styles
$ touch app.scss
$ touch common.scss

app.scss项目代码

@charset "UTF-8";
@import "./common.scss";
body{
background-color: $base-color;
color: #000;
font-size: 20px;
font-weight: 800;
}
html{
width: 100%;
height: 100%;
}
html{
width: 100%;
height: 100%;
}
.lsds{
width: 100px;
height: 100px;
}

common.scss代码

$base-color:yellow;

安装css预编译包

$ npm install gulp-sass   //sass编辑包
$ npm install gulp-minify-css'); //css压缩包
//引入css预处理模块
var sass= require('gulp-sass');
//引入css压缩模块
var minifyCSS = require('gulp-minify-css');
//css预处理 var cssFiles=[
'./src/styles/app.scss'
];
gulp.task('scss',function () {
gulp.src(cssFiles)
.pipe(sass().on('error',sass.logError))
.pipe(minifyCSS())
.pipe(gulp.dest('./build/prd/styles/'))
})

编辑scss

$ gulp scss

开启服务

安装server包

 $ npm install gulp-webserver

//引入gulp-webserver 模块
var server = require('gulp-webserver');
gulp.task('server',function () {
gulp.src('./')
.pipe(server({
host:'127.0.0.1', //ip
port:80, //端口
directoryListing:{
enable:true,
path:'./'
},
livereload:true,
}));
})

开启服务指令

 $ gulp server

然后就可以访问 127.0.0.1了

添加watch

//侦测文件变化, 执行相应的任务
gulp.task('watch',function () {
gulp.watch('./index.html',['copy-index']);
gulp.watch('./images/**/*',['copy-images']);
gulp.watch('./src/styles/*.{scss,css}',['scss','min']); //去掉min
// gulp.watch('./src/scripts/*.js',['packjs','min']) //这行先 在配置js编译后使用的
})
//第一个参数代表监听的文件 第二个参数是执行的任务 //配置default 任务,执行任务队列 gulp.task('default',['watch','server'],function () {
console.log('任务队列执行完毕');
})

配置webpack

安装模块

$ npm install vinyl-named
$ npm install gulp-webpack
$ npm install gulp-uglify
//引入js 模块化工具gulp-webpack,  获取js文件模块 vinyl-named,js压缩模块
var named = require('vinyl-named');
var webpack = require('gulp-webpack');
var uglify = require('gulp-uglify'); var jsFiles = [
'./src/scripts/app.js'
];
gulp.task('packjs',function () {
gulp.src(jsFiles)
.pipe(named())
.pipe(webpack({
output:{
filename:'[name].js'
},
module:{
loaders:[
{
test:/\.js$/,
loader:'imports?define=>false'
}
]
}
}))
.pipe(uglify().on('error',function (err) {
console.log('\x07',err.linerNumber,err.message);
return this.end();
}))
.pipe(gulp.dest('./build/prd/scripts/'))
})

mock数据

在服务模块中添加整个服务代码为


gulp.task('server',function () {
gulp.src('./')
.pipe(server({
host:'127.0.0.1',
port:80,
directoryListing:{
enable:true,
path:'./'
},
livereload:true, //热更新
// mock 数据
middleware:function(req,res,next){
var urlObj =url.parse(req.url,true); //req.url是整个url urlObj是请求的信息集合体
switch(urlObj.pathname){
case '/api/orders':
res.setHeader('Comtent-Type','application/json'); // //返回体的格式
fs.readFile('./mock/list.json',function(err,data){ //读取文件
if(err){
res.send('读取文件错误'); //错误返回 }
res.end(data); //返回json数据
});
return;
case '/api/users':
return;
case '/api/cart':
return;
}
next();
}
}));
})

版本控制

升级插件

 $ npm install gulp-rev
$ npm install gulp-rev-collector
$ npm install gulp-sequence
//引入fs  url模块
var fs = require('fs');
var url = require('url'); //引入 rev revCollector 模块 提供控制版本号的功能
var rev = require('gulp-rev');
var revCollector= require('gulp-rev-collector'); //引入gulp-sequence模块
var sequence = require('gulp-sequence'); //版本号控制
var cssDistFile = [
'./build/prd/styles/app.css'
];
var jsDistFile = [
'./build/prd/scripts/app.js'
];
gulp.task('ver',function(){
gulp.src(cssDistFile) //执行的文件路径
.pipe(rev()) //生成版本号
.pipe(gulp.dest('./build/prd/styles/')) 拷贝了一份app.css
.pipe(rev.manifest()) //*生成如下的这种格式的json文件{"app.js": "app-8232057589.js"}
.pipe(gulp.dest('./build/ver/styles/')) //拷贝这个文件到指定地方
gulp.src(jsDistFile)
.pipe(rev())
.pipe(gulp.dest('./build/prd/scripts/'))
.pipe(rev.manifest())
.pipe(gulp.dest('./build/ver/scripts/'))
});
gulp.task('html',function(){
gulp.src(['./build/ver/**/*','./build/*.*'])
.pipe(revCollector())
.pipe(gulp.dest('./build')); });
gulp.task('min',sequence('copy-index','ver','html')); //sequence串行执行 并行使用[]

gulp+webpack配置的更多相关文章

  1. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  2. gulp + webpack + sass 学习

    笔记: new webpack.optimize.CommonsChunkPlugin 核心作用是抽离公共代码,chunks:['index.js','main.js'] 另一个作用就是单独生成一个j ...

  3. 基于流的自动化构建工具------gulp (简单配置)

    项目上线也有一阵子,回头过来看了看从最初的项目配置到开发的过程,总有些感慨,疲软期,正好花点时间,看看最初的配置情况 随着前端的发展,前端工程化慢慢成为业内的主流方式,项目开发的各种构建工具,也出现了 ...

  4. gulp+webpack+vue

    gulp+webpack+vue 章节目录 1.目标 2.实现 2.1合并库文件 2.2组织业务代码 2.3打包开发代码 2.4使用webpack-dev-server和热替换插件HotModuleR ...

  5. webpack配置这一篇就够

    最近看了一篇好文,根据这个文章重新梳理了一遍webpack打包过程,以前的一些问题也都清楚了,在这里分享一下,同时自己也做了一些小的调整 原文链接:http://www.jianshu.com/p/4 ...

  6. gulp & webpack整合

    为什么需要前端工程化? 前端工程化的意义在于让前端这个行业由野蛮时代进化为正规军时代,近年来很多相关的工具和概念诞生.好奇心日报在进行前端工程化的过程中,主要的挑战在于解决如下问题:✦ 如何管理多个项 ...

  7. grunt,gulp,webpack前端打包工具的特性

    1.http://www.cnblogs.com/lovesong/p/6413546.html (gulp与webpack的区别) 2.http://blog.csdn.net/qq_3231263 ...

  8. 用gulp+webpack构建多页应用——记一次Node多页应用的构建过程

    通过参考网上的一些构建方法,当然也在开发过程中进行了一番实践,最终搭建了一套适用于当前多页应用的构建方案,当然该方案还处于draft版本,会在后续的演进过程中不断的优化. 个人觉得该方案的演进过程相对 ...

  9. webpack配置指南

    Webpack已经出来很久了,相关的文章也有很多,然而比较完整的例子却不是很多,让很多新手不知如何下脚,下脚了又遍地坑 说实话,官方文档是蛮乱的,而且有些还是错的错的..很多配置问题只有爬过坑才知道 ...

随机推荐

  1. 2-Third Scrum Meeting-20151203

    任务安排 闫昊: 今日完成:请假.(编译+计组,压力有点大) 明日任务:设计本地数据库. 唐彬: 今日完成:请假.(编译+计组,压力有点大) 明日任务:阅读ios客户端代码. 史烨轩: 今日完成:请假 ...

  2. 1001 A+B

    代码链接 PDF链接 首先要说的是这道题的难点是如何把数字输出加入逗号,毕竟数据范围并没有超过Long.当然这个难点也不是问题,将数字转为字符串,C中就有这样的函数,然后再用 %3==0 这样来控制输 ...

  3. Leetcode题库——8.字符串转为整数【##】

    @author: ZZQ @software: PyCharm @file: myAtoi.py @time: 2018/9/20 20:54 要求:实现 atoi,将字符串转为整数. 1)根据需要丢 ...

  4. 【贪心算法】POJ-3262

    一.题目 Description Farmer John went to cut some wood and left N (2 ≤ N ≤ 100,000) cows eating the gras ...

  5. Internet History, Technology and Security (Week3)

    Week3. Welcome to week 3! This is our fourth and final week of History where we make the connection ...

  6. p4factory下 targets/basic_rout

    p4factory/targets/basic_routing/p4src代码解读 headers.p4 header_type ethernet_t { fields { dstAddr : 48; ...

  7. json 数组

    /** * 获取 选中的id * @returns {*} */function getCheckedList(){ var groups =[]; $("input[name='check ...

  8. Mongodb 分片操作实战

    由于生产环境中一般使用zoomkeeper做config节点的仲裁节点,zoomkeeper会在三个config节点中挑选出一台作为主config节点.且mongos节点一般是两个节点,必须做高可用, ...

  9. sqlsever实现更改字段名

    新建表:create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default '默认值' null ...

  10. Excel中用REPT函数制作图表

    本文从以下七个方面,阐述在Excel中用REPT函数制作图表: 一. 图形效果展示 二. REPT语法解释 三. REPT制作条形图 四. REPT制作漏斗图 五. REPT制作蝴蝶图 六. REPT ...