webpack 使用 enhanced-resolve
来解析模块路径。
绝对路径
1 | import '/home/me/file'; |
对于绝对路径,webpack 不会对其进行解析。
相对路径
1 | import '../src/file1'; |
对于相对路径,webpack 会使用当前 import 语句所在文件的路径作为上下文路径进行解析。
模块路径
1 | import 'module'; |
webpack 首先会在 resolve.modules( webpack 配置项) 配置的目录中进行检索。
解析出路径后,可能会是文件或文件夹:
- 文件
- 有扩展名时,直接将文件打包
- 没扩展名时,使用
resolve.extensions
(webpack 配置项)来解析文件扩展名
- 文件夹
- 包含 package.json 文件时,会在此文件中查找第一个符合
resolve.mainFields
配置的字段来确定文件路径 - 不包含 package.json 或
resolve.mainFields
没有返回有效路径,则会根据resolve.mainFiles
配置项中指定的文件名顺序查找,看是否能在 import/require 的目录下匹配到一个存在的文件名。 - 然后使用
resolve.extensions
选项,以类似的方式解析文件扩展名。
- 包含 package.json 文件时,会在此文件中查找第一个符合
loader 解析
loader 的解析规则也遵循上面的规范。但是 resolveLoader
配置项可以为 loader 设置独立的解析规则。