Webpack 一些概念
目录
- 引子
- Dependency Graph
- Runtime
- Manifest
- Module、Bundle、Chunk
- Bundle Splitting
- Code Splitting
- Tree Shaking
- Output Filename
- 参考资料
引子
打包工具有多种,实际中 webpack 接触的比较多,目前中文文档跟英文文档有些对不上,其中有些概念比较分散,对此进行集中的整理。
Dependency Graph
任何时候,一个文件依赖于另一个文件,webpack 把这种情况视为依赖关系。这让 webpack 可以接受非代码资源,例如图片或字体,并且可以将它们作为依赖提供给你的应用程序。
当 webpack 处理你的程序时,可能是从命令行或配置文件中定义的一系列模块开始。从入口文件开始,webpack 递归地构建一个依赖图(Dependency Graph),这个依赖图包含着应用程序所需的每个模块,并生成一个或多个 bundle ,可由浏览器加载。
Runtime
runtime和manifest数据,基本上是在浏览器运行时,webpack 用来连接模块化应用程序所需的所有代码。- 它包含在模块交互时连接它们所需的加载和解析逻辑。这包括连接已经加载到浏览器中的模块,以及延迟加载尚未加载的模块的逻辑。
Manifest
manifest作为名词时,中文意思是:(船或飞机的)货单,旅客名单- 当编译器进入、解析和映射你的应用程序时,它会在你的所有模块上保留详细的信息,这个数据集合称为“
manifest”。 - 当完成打包并发送到浏览器时,
runtime会通过manifest来解析和加载模块。 - 无论你选择哪种模块语法,那些
import或require语句现在都已经转换为__webpack_require__方法,此方法指向模块标识符(module identifier)。
Module、Bundle、Chunk
Module
- 比完整程序更小的接触面的分离的块(chunk)功能,使得验证、调试、测试轻而易举。
- 精心编写的模块提供了可靠的抽象和封装边界,构成了连贯的设计和清晰易懂的目的。
Bundle
- 作为名词时,意思是:(一)捆,包,扎。
- 从多个不同的模块产生,包含已经加载和编译过程的源文件的最终版本。
- 个人理解就是一些相关联的包打包成的一个文件。
Chunk
- 作为名词时,意思是:块,组块,话语组成部分。
- 这个 webpack 中特定术语在内部用于管理打包过程。
bundles由chunks组成,其中有多种类型(例如入口)。- 通常,
chunks与输出bundles直接对应,但是,有些配置不产生一对一关系。
Bundle Splitting
- 这个过程提供了一种优化构建的方法,允许 webpack 为单个应用生成多个
bundle。 - 它可以将每个包的更改隔离开来,而不影响其它包。
- 这样利用浏览器的缓存,可以减少需要重新发布和客户端下载的代码量。
Code Splitting
指将代码分成不同的 bundles/chunks ,然后可以按需加载,而不是加载包含所有内容的单个 bundles 。
Tree Shaking
- 消除多余和未使用的代码。
- webpack 通过分析各种导入语句和导入代码的使用,以确定实际使用的依赖项,删除不属于“tree”的一部分。
Output Filename
webpack 提供了一种使用称为 substitution (可替换模板字符串) 的方式,通过带括号字符串来模板化文件名。
| 模版 | 描述 |
|---|---|
| [hash] | 模块标识符的 hash。修改一个模块,其它模块生成的 hash 都会变。 |
| [contenthash] | 文件内容的 hash,每个都不相同。只有改变了内容的文件的 hash 才会变。 |
| [chunkhash] | chunk 内容的 hash。一个文件改变,其关联的文件 hash 也会变。 |
| [name] | 模块的名称 |
| [id] | 模块标识符 |
| [query] | 模块的 query,例如文件名 ? 后面的字符串 |
| [function] | 返回文件名称的方法 |
参考资料
Webpack 一些概念的更多相关文章
- webpack(2)webpack核心概念
前言 本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具.当 webpack 处理应用程序时,它会在内部构建一个 依赖图(dependency graph) ...
- webpack核心概念
一.webpack四个核心概念 1.入口[Entry] webpack将创建所有应用程序 依赖关系图表.图表的起点被称之为 入口起点.入口起点告诉webpack从哪里开始,并遵循着依赖关系图表知道打包 ...
- webpack入门概念
一 概念 1 入口(entry) 入口起点(entry point)提示webpack 应该使用那个模块,来作为构建其内部依赖图得开始.进入入口七点后,webpack 会找出那些模块和库是入口起点(直 ...
- WebPack基本概念以及基本使用
入门Webpack,看这篇就够了 2017年9月18日更新,添加了一个使用webpack配置多页应用的demo,可以点击此处查看 2017年8月13日更新,本文依据webpack3.5.3将文章涉及代 ...
- webpack基础概念
中文文档:https://webpack.docschina.org/concepts/ 一个现代 JavaScript 应用程序的静态模块打包器(static module bundler). 在 ...
- webpack核心概念使用的综合小案例
注: 由于版本更新很快,同样的配置不同版本很可能会出错(这个就很绝望了) 解决思路 看文档 查看源码接口 网上搜索相应错误 环境 webpack4.x + yarn 文件结构 . ├── dist / ...
- webpack安装与核心概念
安装webpack webpack核心概念:入口.输出.加载器.插件.模块.模式 一.安装webpack 1.安装webpack之前需要安装nodejs环境,在使用nodejs环境自带的包管理工具np ...
- webpack四个基础概念
本文参考自:https://www.cnblogs.com/xiaohuochai/p/7002344.html webpack 核心概念:入口(entry).输出(output).加载器(loade ...
- webpack之傻瓜式教程
接触webpack也有挺长一段时间了,公司的项目也是一直用着webpack在打包处理,但前几天在教新人的情况下,遇到了一个问题,那就是:尽管网上的webpack教程满天飞,但是却很难找到一个能让新人快 ...
随机推荐
- CCNA 之 综合实验
CCNA 综合实验 需要:根据下列图中的网路拓扑,搭建环境; PC1属于VLAN10:PC2属于VLAN20:网关均在OR_C2811: VLAN10.20对应的网段分别为192.168.10.0.2 ...
- CCNA 之 十 ACL 访问控制列表
ACL 访问控制列表 ACL(Access Control List) 接入控制列表 ACL 的量大主要功能: 流量控制 匹配感兴趣流量 标准访问控制列表 只能根据源地址做过滤 针对曾哥协议采取相关动 ...
- 【Python】之format奇技淫巧的输出控制
前置 环境:Python3.6.5 探讨点:输出print,字符串format控制, % 控制 print基础控制 简单示范: a = 1 b = '@Hello yanshanbei!' print ...
- Python Kite 使用教程 轻量级代码提示
1: 概述 今天升级annacoda 插件 spyder (4.0.0 )的时候 提示安装kite ,这是什么玩意? 下载下来试一试? 原来:就是一个代码提示插件.. 说白了" 就是让开发 ...
- Erlang/Elixir精选-第2期(20191209)
Spot The Discrepancies with Dialyzer for Erlang. 如何在大型Erlang项目中从零开始一步步践行Dialyzer. Which companies ar ...
- ubuntu16.04 安装cuda9.0+cudnn7.0.5+tensorflow+nvidia-docker配置GPU服务
[摘要] docker很好用,但是在GPU服务器上使用docker却比较复杂,需要一些技巧,下面将介绍一下在ubuntu16.04环境下的GPU-docker环境搭建过程. 第一步: 删除之前的nvi ...
- 从React 编程到"好莱坞"
目录 概念 面向流设计 异步化 响应式宣言 参考文档 概念 Reactive Programming(响应式编程)已经不是一个新东西了. 关于 Reactive 其实是一个泛化的概念,由于很抽象,一些 ...
- 转:关于JAVA项目中CLASSPATH路径详解
在dos下编译Java程序,就要用到classpath这个概念,尤其是在没有设置环境变量的时候.classpath就是存放.class等编译后文件的路径. javac:如果当前你要编译的Java文件中 ...
- KETTLE多表关联的同步一张表的两种实现方式
以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 在平时工作当中,会遇到这种情况,而且很常见.比如:读取对方的多个视图或者表,写入目标库的一张表中,就涉及到多表的同步. 多表同步可以有以 ...
- 小白学 Python 爬虫(16):urllib 实战之爬取妹子图
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...