美文网首页
Webpack4-其他概念

Webpack4-其他概念

作者: 16325 | 来源:发表于2020-03-08 01:08 被阅读0次

模块

什么是 webpack 模块

对比 Node.js 模块,webpack 模块能够以各种方式表达它们的依赖关系,几个例子如下:

  • ES2015 import 语句
  • CommonJS require() 语句
  • AMD definerequire 语句
  • css/sass/less 文件中的 @import 语句
  • 样式(url(...))或 HTML 文件(<img src=...>)中的图片链接(image url)

webpack 1 需要特定的 loader 来转换 ES 2015 import,然而通过 webpack 2 可以开箱即用。

支持的模块类型

webpack 通过 loader 可以支持各种语言和预处理器编写模块。loader 描述了 webpack 如何处理 非 JavaScript(non-JavaScript) 模块,并且在bundle中引入这些依赖。

模块解析(Module Resolution)

resolver 是一个库(library),用于帮助找到模块的绝对路径。一个模块可以作为另一个模块的依赖模块,然后被后者引用,如下:

import foo from 'path/to/module'
// 或者
require('path/to/module')

所依赖的模块可以是来自应用程序代码或第三方的库(library)。resolver 帮助 webpack 找到 bundle 中需要引入的模块代码,这些代码在包含在每个 require/import 语句中。 当打包模块时,webpack 使用 enhanced-resolve 来解析文件路径

webpack 中的解析规则

使用 enhanced-resolve,webpack 能够解析三种文件路径:

  • 绝对路径
    import "/home/me/file";
    import "C:\Users\me\file";
    由于我们已经取得文件的绝对路径,因此不需要进一步再做解析。

  • 相对路径
    import "../src/file1";
    import "./file2";
    在这种情况下,使用 import 或 require 的资源文件(resource file)所在的目录被认为是上下文目录(context directory)。在 import/require 中给定的相对路径,会添加此上下文路径(context path),以产生模块的绝对路径(absolute path)。

  • 模块路径
    import "module";
    import "module/lib/file";
    1.模块将在 resolve.modules 中指定的所有目录内搜索。 你可以替换初始模块路径,此替换路径通过使用 resolve.alias 配置选项来创建一个别名。
    2.一旦根据上述规则解析路径后,解析器(resolver)将检查路径是否指向文件或目录。如果路径指向一个文件:
    3.如果路径具有文件扩展名,则被直接将文件打包。
    4.否则,将使用 [resolve.extensions] 选项作为文件扩展名来解析,此选项告诉解析器在解析中能够接受哪些扩展名(例如 .js, .jsx)。
    5.如果路径指向一个文件夹,则采取以下步骤找到具有正确扩展名的正确文件:
    6.如果文件夹中包含 package.json 文件,则按照顺序查找 resolve.mainFields 配置选项中指定的字段。并且 package.json 中的第一个这样的字段确定文件路径。
    7 如果 package.json 文件不存在或者 package.json 文件中的 main 字段没有返回一个有效路径,则按照顺序查找 resolve.mainFiles 配置选项中指定的文件名,看是否能在 import/require 目录下匹配到一个存在的文件名。
    8 文件扩展名通过 resolve.extensions 选项采用类似的方法进行解析。

依赖图表(Dependency Graph)

任何时候,一个文件依赖于另一个文件,webpack 就把此视为文件之间有依赖关系。这使得 webpack 可以接收非代码资源(non-code asset)(例如图像或 web 字体),并且可以把它们作为依赖提供给你的应用程序。

webpack 从命令行或配置文件中定义的一个模块列表开始,处理你的应用程序。 从这些入口起点开始,webpack 递归地构建一个依赖图,这个依赖图包含着应用程序所需的每个模块,然后将所有这些模块打包为少量的 bundle - 通常只有一个 - 可由浏览器加载。

文件清单(Manifest)

一旦你的应用程序中,形如 index.html 文件、一些 bundle 和各种资源加载到浏览器中,会发生什么?你精心安排的 /src 目录的文件结构现在已经不存在,所以 webpack 如何管理所有模块之间的交互呢?这就是 manifest 数据用途的由来……

当编译器(compiler)开始执行、解析和映射应用程序时,它会保留所有模块的详细要点。这个数据集合称为 "Manifest",当完成打包并发送到浏览器时,会在运行时通过 Manifest 来解析和加载模块。无论你选择哪种模块语法,那些 importrequire 语句现在都已经转换为 __webpack_require__ 方法,此方法指向模块标识符(module identifier)。通过使用 manifest 中的数据,runtime 将能够查询模块标识符,检索出背后对应的模块。

构建目标(Targets)

因为服务器和浏览器代码都可以用 JavaScript 编写,所以 webpack 提供了多种构建目标(target),默认是 'web',可省略
要设置 target 属性,只需要在你的 webpack 配置中设置 target 的值。

module.exports = {
  target: 'node'
};

模块热替换(Hot Module Replacement)

在开发过程中,可以将 HMR 作为 LiveReload 的替代。webpack-dev-server 支持 hot 模式,在试图重新加载整个页面之前,热模式会尝试使用 HMR 来更新。

相关文章

  • Webpack4-其他概念

    模块 什么是 webpack 模块 对比 Node.js 模块,webpack 模块能够以各种方式表达它们的依赖关...

  • Webpack4-开篇

    Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境...

  • Webpack4-配置

    module.rule.parser 解析选项对象。所有应用的解析选项都将合并。 解析器(parser)可以查阅这...

  • Dubbo背景--延伸其他概念

    架构的演进 单一应用架构   当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,...

  • webpack4-入门篇

    时隔一年,我又回来了。近期给团队的小伙伴分享webpack知识,也在此留印一下。 我们用webpage做什么? 打...

  • webpack4-生成html文件

    但在真实生产环境中,一次运行webpack后,完整的index.html应该是被自动生成的。例如静态资源、js 脚...

  • 2.4 机器学习概念 - 其他分类

    在线学习和批量学习 批量学习采用的模型是原始数据生成的模型,输出的结果数据,不会改变原有模型在线学习生成的模型是根...

  • 大概念与其他知识的区别(大概念特征)

    第一,中心性 从位置上看,大概念处于学科知识的中心,而其他概念与知识处于学科知识的次要位置,不是所有的概念都被称为...

  • 复利(概念十二)

    一,这个概念是什么,这个概念不是什么。 二,这个概念和什么相似,又有什么不同。 三,这个概念有什么用,和其他概念有...

  • 概念

    一,这个概念是什么,这个概念不是什么。 二,这个概念和什么相似,又有什么不同。 三,这个概念有什么用,和其他概念有...

网友评论

      本文标题:Webpack4-其他概念

      本文链接:https://www.haomeiwen.com/subject/gejldhtx.html