gulp+webpack配置

gulp+webpack配置

首先介绍一下gulp和webpack

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](http://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串行执行 并行使用[]

最后在github上面有源码 有兴趣可以下载看看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,431评论 1 32
  • -- 1. Gulp VS webpack 比较 Gulp 是一个任务管理工具,让简单的任务更清晰,让复杂的任务易...
    慢清尘阅读 3,533评论 7 16
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,140评论 7 35
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始逐渐渗...
    彬_仔阅读 25,545评论 21 139
  • 原文标题:Gulp for Beginners作者: Zell Liew翻译:治电小白菜原文地址:https://...
    ZZES_ZCDC阅读 1,570评论 6 18