webpack 模块路径解析规则

webpack 使用 enhanced-resolve 来解析模块路径。

绝对路径

1
2
3
import '/home/me/file';

import 'C:\\Users\\me\\file';

对于绝对路径,webpack 不会对其进行解析。

相对路径

1
2
import '../src/file1';
import './file2';

对于相对路径,webpack 会使用当前 import 语句所在文件的路径作为上下文路径进行解析。

模块路径

1
2
import 'module';
import 'module/lib/file';

webpack 首先会在 resolve.modules( webpack 配置项) 配置的目录中进行检索。

解析出路径后,可能会是文件或文件夹:

  • 文件
    • 有扩展名时,直接将文件打包
    • 没扩展名时,使用 resolve.extensions (webpack 配置项)来解析文件扩展名
  • 文件夹
    1. 包含 package.json 文件时,会在此文件中查找第一个符合 resolve.mainFields 配置的字段来确定文件路径
    2. 不包含 package.json 或 resolve.mainFields 没有返回有效路径,则会根据 resolve.mainFiles 配置项中指定的文件名顺序查找,看是否能在 import/require 的目录下匹配到一个存在的文件名。
    3. 然后使用 resolve.extensions 选项,以类似的方式解析文件扩展名。

loader 解析

loader 的解析规则也遵循上面的规范。但是 resolveLoader 配置项可以为 loader 设置独立的解析规则。