Gulp到Webpack迁移的研究

从概念上,gulp和webpack不是一个层次的东西。但是在现在的前端项目中,他们承担的角色却越来越类似,打包,扰码,开发,调试,css处理等等。

Bower vs NPM

对于处理JS依赖这一块,Bower通过wiredep把JS压缩到一个bundle里面,一般来说,不需要自己来处理依赖;wiredep也相当智能,可以通过分析bower_components里面需要添加到one_page入口的文件中。例如,Angular通过package.json中指定的main把需要的index.js放到html中,如下。

{
  "name": "angular",
  "version": "1.5.11",
  "description": "HTML enhanced for web apps",
  "main": "index.js",
  ...
}
<!-- build:js(.) scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/angular/angular.js"></script>
...
<!-- endbower -->
<!-- endbuild -->

从某种意义上,bower的这种做法更加简单和便捷,省去的程序员处理依赖的过程。但是Bower本身的能力受限,在Why we should stop using Bower一文中,提到了bower遇到的一些问题。

  1. Bower不支持嵌套依赖。
  2. Bower本身的冗余性。
  3. Bower的不可靠性。

个人认为,bower本身是有很多问题,例如,bower的publish是任何人都可以发布,没有验证正确性。也可能是因为NPM的后继这Yarn的包管理工具的推出,更多的开发者更愿意在npm/yarn上进行开发。总之,现在的大趋势更趋向于支持npm。

Webpack

webpack.png

可以通过https://github.com/lishan/OCProject/tree/master/Webpack下载完整例子。

为了用后台的声明依赖的方式进行前端开发,使用webpack来进行打包将是大势所趋。以下是在爬坑中遇到的一些问题。

  1. Webpack Config可否支持es6?

使用webpack.config.babel.js代替webpack.config.js即可,这个和gulpfile.babel.js的方式类似。

  1. Webpack使用打包文件,如何debug?

Webpack提供一个参数devtool = 'inline-source-map',表示在浏览器上查看的时候是单独的文件所在行,一般应用于dev环境中。

  1. Webpack作为一个standalone cli有哪些配置项?

如下是例子项目中提供的一些命令,使用npm run build之类的可以运行提供的功能。
--progress 显示进度
--profile 显示build时间
--bail 遇到第一个错误时退出

"scripts": {
    "build": "webpack --bail --progress --profile --config webpack/webpack.prod.babel.js",
    "start": "npm run server",
    "server": "babel-node server/app.js",
    "prod": "webpack-dev-server --inline --content-base ./dist --config webpack/webpack.prod.babel.js"
  },
  1. 如何直接用node运行es6程序?

可以通过babel-node代替node命令。

  1. 常用的Webpack plugin?

通过Webpack plugin可以做gulp plugin类似的工作,所以在引言中提到他们的作用已经越来越相似。

new HtmlWebpackPlugin({ //生成入口的html文件,可以通过模板生成,支持ejs, handlebars语法
    template: './app/index.html'
    }),
new ExtractTextPlugin("styles.css")//抽取style-loader中的到单独文件
new CleanWebpackPlugin(['dist']),//删除一个文件夹
new CopyWebpackPlugin([{ //拷贝一些文件
    from: path.resolve(__dirname, '..', 'app', '404.html')
}]),
new UglifyJSPlugin() //JS压缩
  1. Webpack-dev-server vs webpack-dev-middleware?

这两个扮演的是gulp中一般使用一个express上部署工程。相同的是,他们生成的文件目录都是放在内存中的,不会像运行webpack生成dist目录。

webpack-dev-middleware可以和express结合,我们在示例中采用这样的方式,在express上我们可以配置我们的RESTAPI层。和以前的项目类似。

  1. Angular的Controller例子?

给出一段示例代码,需要注意的是$scope这样的注入项必须采用这种AMD方式,否则在uglify中会有Unknow provider的错误。

import angular from 'angular';

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

推荐阅读更多精彩内容

  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,428评论 1 32
  • 前言 众所周知目前比较火的工具就是gulp和webpack,但webpack和gulp却有所不同,本人两者的底层研...
    cduyzh阅读 1,354评论 0 13
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,134评论 7 35
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,269评论 4 31
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,669评论 7 110