环境参数和预备技能:

webpack的详细注解_html

webpack是什么

webpack的详细注解_webpack_02

webpack的五个核心概念

Entry

入口

Output

输出,资源的命名等

Loader

处理非js资源

Plugins

执行更广泛的任务,从打包优化和压缩,一直到重新定义环境中的变量等

Mode

开发模式和生产模式

webpack的详细注解_webpack_03

webpack的基本使用

下载两个包。

webpack的详细注解_前端_04


webpack的详细注解_node.js_05


生产环境下的多了压缩。

无法打包样式文件。

webpack的详细注解_node.js_06


webpack的详细注解_webpack_07

打包样式资源

我们先要定义一个配置文件。

webpack的详细注解_node.js_08


webpack的详细注解_前端_09

项目代码我们基于ES6模块化,项目代码我们基于common JS模块化。

webpack的详细注解_前端_10


webpack的详细注解_html_11


webpack的详细注解_webpack_12


样式中的详细配置。

webpack的详细注解_webpack_13


npm init

初始化包文件。

下载两个包。

webpack的详细注解_webpack_14


webpack的详细注解_缓存_15


运行一下。指令:webpack

webpack的详细注解_html_16


less需要添加一个规则。

webpack的详细注解_html_17

webpack的详细注解_前端_18

打包html资源

webpack的详细注解_缓存_19


下载插件。

webpack的详细注解_html_20


引入插件,是一个构造函数。

webpack的详细注解_前端_21


使用。

webpack的详细注解_node.js_22

会帮我们自动引入在入口文件标识要引入的文件。

打包图片资源

使用loader处理图片资源。

webpack的详细注解_前端_23


下载两个包。

webpack的详细注解_node.js_24


webpack的详细注解_node.js_25


webpack的详细注解_webpack_26


上述的处理不了html的文件,所以我们要将html引进来,让url去解析,但是url解析使用的是es6的解析规则,html使用的commonJS的规则,我们我们关掉es解析模块。

webpack的详细注解_html_27


不希望名字太长的话,我们可以对图片重命名。

webpack的详细注解_node.js_28

打包其他资源

比如字体图标。

我们推荐阿里的图标库。

webpack的详细注解_webpack_29


把其他打包的资源排除,使用我们的file-loader打包其他资源。

webpack的详细注解_webpack_30


webpack的详细注解_html_31

devServer

webpack的详细注解_html_32


我们需要下载这个包。

webpack的详细注解_前端_33


包是本地安装的,所以需要用npx启动。

webpack的详细注解_html_34


监视源代码的变化,一旦发现变化,就会自动编译。再也不需要我们重新打包查看效果。

自动打开浏览器。

webpack的详细注解_node.js_35

开发环境基本配置

开发环境基本配置,能让代码运行。

webpack的详细注解_node.js_36


资源越来越多,需要我们划分好目录。css样式文件也被打包到js文件中。

构建环境介绍

webpack将我们的文件打包成浏览器能够识别的文件。

提取css成单独文件

下载一个插件。

webpack的详细注解_node.js_37


我们先引入这一个插件。

webpack的详细注解_前端_38


webpack的详细注解_前端_39


引入生成的单独css文件。

webpack的详细注解_webpack_40


对我们输出的css文件进行重命名。

webpack的详细注解_webpack_41

css兼容性处理

webpack的详细注解_webpack_42


下载好两个包。

webpack的详细注解_webpack_43


webpack的详细注解_缓存_44


配置一下package.json

webpack的详细注解_缓存_45


webpack的详细注解_前端_46


设置nodejs的环境变量。

webpack的详细注解_缓存_47


配置一下。

webpack的详细注解_node.js_48

压缩css

压缩css的插件。

webpack的详细注解_html_49


引入。

webpack的详细注解_缓存_50


调用。

webpack的详细注解_前端_51

js语法检查eslint

需要两个库。

webpack的详细注解_node.js_52


只检查自己写的源代码。

webpack的详细注解_node.js_53


推荐的语法检查的库。

webpack的详细注解_前端_54


webpack的详细注解_前端_55


webpack的详细注解_node.js_56


webpack的详细注解_node.js_57


下载这些包。

webpack的详细注解_html_58


package.json中的配置。

webpack的详细注解_node.js_59


让它自动修改。

webpack的详细注解_html_60


有时候我们需要保留某些代码。忽略检查!

webpack的详细注解_html_61

js兼容性处理eslint

下载插件。

webpack的详细注解_webpack_62


webpack的详细注解_html_63


进行配置。

webpack的详细注解_缓存_64


将es6的语法转化成es5的语法。

没办法解决promise。

webpack的详细注解_缓存_65


引入文件。

webpack的详细注解_node.js_66


解决全部的兼容性问题。

webpack的详细注解_前端_67


所以我们还是推荐按需下载。

webpack的详细注解_html_68


下载一个包,然后进行一些配置。使用第三种方案就不能使用第二种方案。

webpack的详细注解_html_69

压缩html和js

生产环境就会自动压缩js代码。

webpack的详细注解_html_70


html不需要进行兼容性处理。进行一些配置。

webpack的详细注解_前端_71

生产环境基本配置

webpack的详细注解_html_72

webpack的详细注解_前端_73


注意顺序。

webpack的详细注解_前端_74


复用loader的代码。

webpack的详细注解_html_75


webpack的详细注解_前端_76


webpack的详细注解_webpack_77


webpack的详细注解_node.js_78

性能优化介绍

webpack的详细注解_node.js_79

HMR

比如,我们希望样式文件变化的时候,其他文件不要重新打包。所以,我们应该使用热模块。

webpack的详细注解_缓存_80


webpack的详细注解_webpack_81


webpack的详细注解_node.js_82


html文件只有一个文件,一旦发生变化,反正都要变化,不需要做热模块。

webpack的详细注解_node.js_83


我们需要对js的代码做hmr。

webpack的详细注解_缓存_84

webpack的详细注解_html_85


入口文件反正需要发生改变。

webpack的详细注解_node.js_86

source-map

webpack的详细注解_缓存_87


构建后映射的文件。

webpack的详细注解_node.js_88


包含不同的参数。

webpack的详细注解_webpack_89


webpack的详细注解_webpack_90


webpack的详细注解_node.js_91


webpack的详细注解_前端_92


最佳方案:eval-source-map

webpack的详细注解_html_93


webpack的详细注解_node.js_94


webpack的详细注解_缓存_95


webpack的详细注解_前端_96


最佳方案:source-map

oneOf

让loader的处理性能更好。只会使用一个loader针对一个文件。

webpack的详细注解_webpack_97


希望执行两个loader的话,我们要将代码不放在oneOf里面。单独放。

webpack的详细注解_webpack_98

缓存

webpack的详细注解_前端_99

服务器代码

webpack的详细注解_前端_100


webpack的详细注解_webpack_101


实现缓存之后,资源在用户端就会有1小时的强制缓存,如果此时出现了一个bug,我们的程序员修改了,但是重新打包上线的话,我们的资源因为被强制在用户端缓存了,不会再去服务端请求资源。所以我们更新资源的时候,我们为文件名添加版本号,让客户端重新请求资源。

每次打包都会生成一个哈希值。

webpack的详细注解_前端_102


我们给文件带上一个哈希值进行处理。

webpack的详细注解_缓存_103


webpack的详细注解_缓存_104


总结:

  1. babel缓存
  2. 文件资源缓存

chunk–代码块。

webpack的详细注解_webpack_105

tree shaking

webpack的详细注解_缓存_106

code split

webpack的详细注解_前端_107


多入口输出多个文件。

webpack的详细注解_html_108


split——

webpack的详细注解_webpack_109

将代码分开打包。公共文件打包成一起。

webpack的详细注解_webpack_110


取一个固定名字。

webpack的详细注解_webpack_111

懒加载和预加载

懒加载。按需加载,我们需要用到的时候才加载文件。

webpack的详细注解_缓存_112


预加载。

webpack的详细注解_webpack_113


webpack的详细注解_node.js_114

webpack的详细注解_html_115


预加载慎用,有很多兼容性问题。

PWA

PWA——渐进式网络开发程序。

下载好包。

webpack的详细注解_前端_116


配置一下插件。

webpack的详细注解_前端_117


webpack的详细注解_前端_118

插件帮我们生成文件。

全局资源加载好以后就注册。

webpack的详细注解_缓存_119


webpack的详细注解_前端_120

webpack的详细注解_node.js_121

多进程打包

webpack的详细注解_webpack_122


webpack的详细注解_缓存_123


​thread-loader​​​放在某一个​​loader​​的后面,就会使得该进程变多进程。

externals

忽略某些包的打包。

webpack的详细注解_前端_124

dll

可以对代码进行单独打包。

webpack的详细注解_node.js_125


webpack的详细注解_node.js_126


webpack的详细注解_前端_127


webpack的详细注解_node.js_128


webpack的详细注解_前端_129


webpack的详细注解_webpack_130


webpack的详细注解_html_131

性能优化总结

webpack的详细注解_html_132


webpack的详细注解_node.js_133

webpack配置详细之entry

三种取值情况。

webpack的详细注解_缓存_134


webpack的详细注解_webpack_135


webpack的详细注解_html_136


webpack的详细注解_webpack_137

webpack配置详细之output

webpack的详细注解_前端_138

webpack配置详细之module

webpack的详细注解_缓存_139


webpack的详细注解_node.js_140

webpack配置详细之resolve

webpack的详细注解_node.js_141

webpack配置详细之devServer

webpack的详细注解_前端_142


webpack的详细注解_html_143

webpack配置详细之optimizaition

在生产环境才有意义。

webpack的详细注解_webpack_144


webpack的详细注解_node.js_145


webpack的详细注解_webpack_146


下载并引入一个库,使用插件。

webpack的详细注解_webpack_147


webpack的详细注解_缓存_148

webpack5介绍和使用

webpack的下载。

webpack的详细注解_前端_149


配置文件更加简单。

webpack的详细注解_node.js_150


webpack的详细注解_node.js_151


webpack的详细注解_webpack_152


webpack的详细注解_node.js_153


webpack的详细注解_缓存_154


webpack的详细注解_前端_155


webpack的详细注解_html_156


webpack的详细注解_前端_157


webpack的详细注解_缓存_158