转自: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. Buaaclubs项目介绍

    简介 首先,它是社团资讯的集散地,任何希望了解北航社团信息或活动情况的同学都可以在这个平台上获取自己需要的信息,并且可以随时随地地参与社团互动,方便快捷地实现网上报名.在线咨询.活动参与等多种功能. ...

  2. bata5

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  3. Leetcode题库——34.在排序数组中国查找元素的第一个和最后一个位置

    @author: ZZQ @software: PyCharm @file: searchRange.py @time: 2018/11/12 19:19 要求:给定一个按照升序排列的整数数组 num ...

  4. B-tree&B+tree&数据库索引原理

    B-tree&B+tree:https://www.cnblogs.com/vianzhang/p/7922426.html 数据库索引原理:https://www.cnblogs.com/a ...

  5. Alpha阶段综合报告

    1.版本测试报告 1.1在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个? Bug分类 Bug内容 Fixed 编辑博文时改变文字格式会刷新界面 Can’t reproduced 无 N ...

  6. javascript数据基本定义以及对象{}和数组[]的含义和使用

    一.基本的数据类型 原始类型(简单数据类型.基本数据类型) Undefined类型: 表示声明了变量但未对其初始化时赋予该变量的值.undefined为Undefined类型下的唯一的一个值. Nul ...

  7. 13种细分类型的TCP重传小结(一张表总结4.4内核所有TCP重传场景)

    具体每种重传类型的wireshark示例解说参考前文 来自为知笔记(Wiz)

  8. cobbler技术详解(是PXE二次详解)

    Cobbler是PXE的二次封装,使用Python语言开发, 可以用来快速建立 Linux 网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学 ...

  9. Robot Framework 教程 (6) - 使用条件表达式

    本篇文章,主要对如何在Robot Framework中使用条件表达式做过程控制作说明. 按照Robot Framework的官方文档介绍,Robot Framework并不建议在TestCase或Ke ...

  10. Windows下 OpenSSL的安装与简单使用

    1. openssl的最新版本 最新版本是 openssl1.1.1 官方地址 https://www.openssl.org/source/ TLS1.3的协议(RFC8446)在2018.8.12 ...