Webpack4使用总结

       最近一个工程要搭建脚手架,不经意看到webpac已经升级到4.x了,这边就借机搭建了一个webpack的脚手架,对webpack的研究不是很深, 没关注过它的实现层,只是拿来用,这里大概写下使用过程和对一些配置的理解。

        webpack4和前代来比,精简了很多配置,写法上也更佳优雅和便于理解了,并且支持了0配置的方式,估计也是受到吐槽配置过于负责的诟病而作出的妥协,像parcel主打的概念就是0配置,一行脚本完成打包,不过老实说0配置在大多数情况并不实用,配置这东西多了复杂,少了不灵活,还是需要一个度的。

webpack官网对于webpack的说明列出了四大核心概念:

入口(entry)

输出(output)

loader

插件(plugins)

这里不对这些概念进行展开了,我们的配置实际上就是围绕这4个核心概念做的,先说入口吧

入口(entry)

实际上webpack4在这里的变化不大,这里我介绍一个多页面的配置情况,可能很多人使用vue或者react单页面spa时入口是只需要配置一个的,但是对于多页面程序,入口是要有多个的,像官方给的例子:


在多页应用中,(译注:每当页面跳转时)服务器将为你获取一个新的 HTML 文档。页面重新加载新文档,并且资源被重新下载。然而,这给了我们特殊的机会去做很多事

当然实际使用中我们不可能去一个一个配置入口文件,当然是自动去处理这块了,当然解决办法基本就是读取页面目录,对每个文件生成对应入口文件,当然你可以选择构建的时候为每个文件自动生成entry,也可以提前写好。多页面的共享代码可以使用CommonsChunkPlugin提取打包,这里说一下在webpack4中CommonsChunkPlugin已经不复存在,后文会提到

输出(output)

同样这里的改动也不大,这里也说一个比较重要的小地方,一个使用cdn资源hash的复杂例子:


在编译时不知道最终输出文件的 publicPath 的情况下,publicPath可以留空,并且在入口起点文件运行时动态设置。如果你在编译时不知道 publicPath,你可以先忽略它,并且在入口起点设置 __webpack_public_path__。


publicPath在这里可以理解为一个页面引入文件根路径的地址,像上面的例子页面的src会标示成:http://cdn.example.com/assets/[hash]home~~~(后面省略了)按官方说法可以进行动态的设置。

模式

这里要插入讲一下webpack4新增的模式,记得在之前版本的配置文件里我们经常要使用到process.env去判断环境以处理不同设置,在wenpack4中出现了mode,让环境配置变得简单起来,你可以这样用:


表示当前启用什么环境去处理,当然设置一个mode不仅是生命环境变量这么简单,不同的环境webpack会默认帮你开启对应的plugin.

if  === development :会将 process.env.NODE_ENV 的值设为 developme。启用 NamedChunksPlugin 和 NamedModulesPlugin。

if  === production :会将 process.env.NODE_ENV的值设为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin和 UglifyJsPlugin

我们在开发中,完全可以配置一个 webpack.config.js来放公共的配置,然后建立一个dev环境的js mode设置为development,prod环境的js,mode设置为production,然后借助webpack-merge来完成本地开发及构建的任务。

loader

loader用法上没有什么改变,loader 用于对模块的源代码进行转换。因此,loader 类似于其他构建工具中“任务(task),比如gulp”,并提供了处理前端构建步骤的强大方法。loader 可以将文件从不同的语言(如 TypeScript)转换为 JavaScript

这里说一种loader的官方不怎么推荐的用法,内联的方式:

可以在 import 语句或任何等效于 "import" 的方式中指定 loader。使用 ! 将资源中的 loader 分开。分开的每个部分都相对于当前目录解析。

importStylesfrom'style-loader!css-loader?modules!./styles.css';

通过前置所有规则及使用 !,可以对应覆盖到配置中的任意 loader。

选项可以传递查询参数,例如 ?key=value&foo=bar,或者一个 JSON 对象,例如 ?{"key":"value","foo":"bar"},当然这并不是官方推荐的方式,尽量不要使用。

插件

插件这里的改动也并不大,因为使用webpack4时搭建的是一个vue的多页面工程,所以这里写一下对于搭建vue多页面工程的配置方式,网上对于多页面的webpack配置说明比较少,其实对于多页面来说,基本的思想就是在入口配置多项,然后配合HtmlWebpackPlugin为不同的页面关联不同的js文件,也就需要为每个页面配置一个entry.js,里面只需要写初始化vue实例的代码以及页面需要引入的公共组件就可以了,一般方式是循环源码文件夹路径,根据路径配置入口,然后可以在每个页面文件夹下手动写一个用于初始化的entry,或者在构建过程中,通过代码自动生成的方式都可以。

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

推荐阅读更多精彩内容