2. webpack 描述

自从 2016 开始, 发现 SPA( Single Page Application ) 越来越多, 以前应用往往是一堆 html 文件通过 url 连接起来, 而到了 SPA, 整个应用只有一个 html 文件, 仅仅通过局部替换组件来完成页面变更.

( 说明一下, SPA 概念是很早以前就出现了, 作为服务端开发在留意前端动态会比较滞后, 关于前端的演变请自行谷歌, 此处不做描述 )

那为何要是用 webpack 这种工具开发呢? 写过代码都知道, 一份源码文件可能会引用多个文件的代码, 引入的文件路径也可能在编译后出现变更, 以 java 的 maven 为例, 项目配置是放在 main/java/resource 内的, 但在编译后, 其实所有的资源文件都放在 /classes/ 里面, 也就是项目根目录. 其次一份源码被多次引用, 代码在编译后如何复用, 以减少项目整体的大小. 在实际开发中可能出现的问题会更多, 并且在前端项目不断膨胀的情况下这类问题会越来越突出, 而 webpack 就是用来解决这一系列问题的.

然后简单讲一下 webpack , 这是个 javascript 里市场份额比较大的包依赖管理及其打包工具. 通过 webpack 我们可以轻松管理项目构建, 列一下最主要的几点:

  1. 设计出更加清晰的项目结构
  2. 通过一系列 webpack 插件解决 编译, 资源分离, 文件重定向 等功能
  3. 配置服务器 & 热部署进行辅助开发

在看文章前先自己看看官网文档说明形成自己的理解.

这里先列一下 webpack 的配置, 下文以此为例子.

webpack 配置概览

在单页面应用内, 会有一个文件来驱动整个应用, 就像大部分 C 派系语言的 main
方法. 这种文件称为入口, 如 entry 配置项所示, index.js 文件被配置为入口, 当有人访问时, 该文件的代码会首先被执行.

  1. 在 webpack 内, entry 也可以配置为多入口, 当然这个就要自己查文档了.

  2. devtool 选项是给开发者指定 source map 的配置方式, 源码在编译并且混淆压缩之后生成的代码是无法调试的, 就像 java 的 class. 解决方法是通过 source map 来定位变量在源码中的位置进行辅助.

  3. output 用于指定编译后的代码输出路径


    output 选项
  4. webpack 支持应用发布, 当然这是用于开发的, 部署热部署后网页效果将与源码同步, 基本就是所见即所得, 省去了不少功夫. 但是这个选项需要安装 webpack-dev-server 插件.

    关于这个插件, 如果想提供外部访问, 需要配置 host 以及 disableHostcheck, public 选项也要写上, 填你的机器在局域网内的 ip, 去掉该选项似乎会造成外部无法访问.


    开发服务器配置
  5. 接下来到 webpack 最重要的一部分, 也就是 module 的配置.


    module 选项

在编译时, webpack 会通过该配置对所有文件进行处理, 以上图为例, 比如 *.vue 的组件注册, vue 文件内的 image , css 等资源的抽离, es5/6/7 的降级编译, 这一系列动作都是通过配置 module 来指定的. webpack 在会从 entry 指定的文件开始检索, 通过 module 给出的 test 把匹配的文件放入对应的 loader 进行处理.

webpack 会从 entry 开始扫描所有关联的文件
  1. resolve 配置用于说明模块在引用时如何被解析, 先看个图.


    resolve 配置

    比如说 extensions 配置告诉 webpack 拥有指定后缀的文件不用写后缀, 那么 import "../example.ts" 可以直接写 import "../example".

    而 alias 让文件引入变得更简单, 比如根目录有一个文件夹叫 util, 我想引用里面的 lang.js 文件, 那么 import "../../util/lang" 可以直接写成 import "@root/util/lang".

  2. 最后是插件, 如下图.


    plugins 配置

    webpack 的插件有很多种, 上图只列出我在项目中用到的插件, 具体列表可以点击这里.

以上就是 webpack 的简述, 当然本文只是起到带路的作用, 很多关于 webpack 的配置都没有说到, 真正入门还需要自己参考官方文档, 然后一步步搭建出一个简单可用的项目.

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

推荐阅读更多精彩内容

  • 最近在学习 Webpack,网上大多数入门教程都是基于 Webpack 1.x 版本的,我学习 Webpack 的...
    My_Oh_My阅读 8,160评论 40 247
  • GitChat技术杂谈 前言 本文较长,为了节省你的阅读时间,在文前列写作思路如下: 什么是 webpack,它要...
    萧玄辞阅读 12,669评论 7 110
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,134评论 7 35
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,269评论 4 31
  • 百日练100天读100本书的第20天,今天用十分钟时间看完一本书叫《专心让我更出色》,理解率90%。这本书讲的是:...
    梦境里的冰雪阅读 149评论 0 0