webpack 相关概念梳理

资源(Asset):用于图片,字体,媒体,其他类型的文件等。这些文件通常在output中输出为单个文件。
bundle: 由多个不同的模块生成,bundle包含了加载和编译过后的最终源文件版本。
bundle分离(Bundle Splitting):优化构建的方法。允许webpack为应用程序生成多个bundle。当其他某些bundle
改动时,彼此独立的另一些bundle不受影响。减少需要重新发布的代码量。

Chunk:这是 webpack 特定的术语被用在内部来管理 building 过程。bundle 由 chunk 组成,
其中有几种类型(例如,入口 chunk(entry chunk) 和子 chunk(child chunk))。通常 chunk 会直接对应所输出的 bundle,但是有一些配置并不会产生一对一的关系。

Code Splitting(代码分离):指将代码分离到每个 bundles/chunks 里面,你可以按需加载,而不是加载一个包含全部的 bundle

模块热替换(Hot Module Replacement(HMR)):  一个修改、添加或删除模块(modules)的过程,而正在运行中的应用程序无需重载加载整个页面。

Loaders:loader 允许你在 require() 或“加载”的文件之前,先预处理文件。就像“任务执行器(task-runner)”

模块(Modules):提供比完整程序接触面(surface area)更小的离散功能块。精心编写的模块提供了可靠的抽象和封装界限,
使得应用程序中每个模块都具有条理清楚的设计和明确的目的。

模块解析(Module Resolution):一个模块可以作为另一个模块的依赖模块,resolver 是一个库( library )用于帮助找到模块的绝对路径... 模块将在 resolve.modules 中指定的所有目录内搜索。

Request:指 require/import 语句中的表达式,例如,在 require("./template/" + name + ".ejs") 中,request 指的是 "./template/" + name + ".ejs"。


模式(mode):提供mode配置选项,告知webpack使用相应模式的内置优化.
mode:development。会将process.env.NODE_ENV设为development。启用NamedChunksPlugin 和 NamedModulesPlugin。
mode:production。
会将 process.env.NODE_ENV 的值设为 production。启用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 UglifyJsPlugin.

Loaders & Plugins:我们知道webpack打包后的bundle文件,比如app.bundle.js里面其实就是个立即运行函数。类似如下结构:

(function (modules) {

 // webpack runtime webpack运行时函数

})({'app.js': (function(){}),

'header.js': (function(){}),

'main.js': (function(){}),

'./assets/background.png': (function(){})

})。(function(modules){})是webpack运行时函数, 外面的({...})是参数,也就是打包后的模块。loader所做的工作就是将那些非javaScript文件转换为javaScript模块,如'./assets/background.png'图片也被转换成了javascript函数。使得其他模块能够引用。随着应用程序越来越大,如果所有模块都打包进app.bundle.js,可想而知这个文件将会非常大。(function(modules))({/**/})参数的内容也将会很大。因此我们需要借助plugins将app.bundle.js分割成多个文件,可以按需加载。可以借助plugins将app.bunle.js里面的webpack运行函数单独抽离出来,并且将运行函数的参数modules,即打包的模块分割成多个独立的modules。

猜你喜欢

转载自blog.csdn.net/qq_20567691/article/details/84326776