标签:返回 开始 式表 pre 链接 方法 ast 检查 build
在模块化编程中,开发者将程序分解成离散功能块(discrete chunks of functionality),并称之为模块。
每个模块具有比完整程序更小的接触面,使得校验、调试、测试轻而易举。 精心编写的模块提供了可靠的抽象和封装界限,使得应用程序中每个模块都具有条理清楚的设计和明确的目的。
Node.js 从最一开始就支持模块化编程。然而,在 web,模块化的支持正缓慢到来。在 web 存在多种支持 JavaScript 模块化的工具,这些工具各有优势和限制。webpack 基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文件。
对比 Node.js 模块,webpack 模块能够以各种方式表达它们的依赖关系,几个例子如下:
import
语句require()
语句define
和 require
语句@import
语句。url(...)
)或 HTML 文件(<img src=...>
)中的图片链接(image url)webpack 通过 loader 可以支持各种语言和预处理器编写模块。loader 描述了 webpack 如何处理 非 JavaScript(non-JavaScript) _模块_,并且在 bundle 中引入这些依赖。 webpack 社区已经为各种流行语言和语言处理器构建了 loader,包括:
总的来说,webpack 提供了可定制的、强大和丰富的 API,允许任何技术栈使用 webpack,保持了在你的开发、测试和生成流程中无侵入性(non-opinionated)。
resolver 是一个库(library),用于帮助找到模块的绝对路径。一个模块可以作为另一个模块的依赖模块,然后被后者引用,如下:
import foo from ‘path/to/module‘ // 或者 require(‘path/to/module‘)
所依赖的模块可以是来自应用程序代码或第三方的库(library)。resolver 帮助 webpack 找到 bundle 中需要引入的模块代码,这些代码在包含在每个 require
/import
语句中。 当打包模块时,webpack
使用 enhanced-resolve 来解析文件路径。
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";
模块将在 resolve.modules
中指定的所有目录内搜索。 你可以替换初始模块路径,此替换路径通过使用 resolve.alias
配置选项来创建一个别名。
一旦根据上述规则解析路径后,解析器(resolver)将检查路径是否指向文件或目录。如果路径指向一个文件:
resolve.extensions
] 选项作为文件扩展名来解析,此选项告诉解析器在解析中能够接受哪些扩展名(例如 .js
, .jsx
)。如果路径指向一个文件夹,则采取以下步骤找到具有正确扩展名的正确文件:
package.json
文件,则按照顺序查找 resolve.mainFields
配置选项中指定的字段。并且 package.json
中的第一个这样的字段确定文件路径。package.json
文件不存在或者 package.json
文件中的 main 字段没有返回一个有效路径,则按照顺序查找 resolve.mainFiles
配置选项中指定的文件名,看是否能在 import/require 目录下匹配到一个存在的文件名。resolve.extensions
选项采用类似的方法进行解析。webpack 根据构建目标(build target)为这些选项提供了合理的默认配置。
Loader 解析遵循与文件解析器指定的规则相同的规则。但是 resolveLoader
配置选项可以用来为 Loader 提供独立的解析规则。
每个文件系统访问都被缓存,以便更快触发对同一文件的多个并行或串行请求。在观察模式下,只有修改过的文件会从缓存中摘出。如果关闭观察模式,在每次编译前清理缓存。
标签:返回 开始 式表 pre 链接 方法 ast 检查 build
原文地址:https://www.cnblogs.com/kdcg/p/13272739.html