模块解析 | Module Resolution
模块解析
import foo from 'path/to/module'
// or
require('path/to/module')
解决webpack中的规则
使用enhanced-resolve,
webpack可以解析三种文件路径:
绝对路径
import "/home/me/file";
import "C:\\Users\\me\\file";
由于我们已经有了文件的绝对路径,因此不需要进一步的解决方案。
相对路径
import "../src/file1";
import "./file2";
模块路径
import "module";
import "module/lib/file";
根据上述规则解析路径后,解析器会检查路径是否指向文件或目录。如果路径指向一个文件:
- 如果路径具有文件扩展名,则被直接将文件打包。
- 否则,使用该
resolve.extensions
选项解析文件扩展名,该选项告诉解析器哪些扩展名(例如 -.js
,.jsx
)可用于解析。
如果路径指向一个文件夹,则执行以下步骤以找到具有正确扩展名的正确文件:
- 如果文件夹中包含
package.json
文件,则按照顺序查找resolve.mainFields
配置选项中指定的字段。并且package.json
中的第一个这样的字段确定文件路径
- 如果
package.json
文件不存在或者package.json
文件中的 main 字段没有返回一个有效路径,则按照顺序查找resolve.mainFiles
配置选项中指定的文件名,看是否能在 import/require 目录下匹配到一个存在的文件名。
- 然后使用该
resolve.extensions
选项以类似的方式解析文件扩展名。
根据您的构建目标,webpack会为这些选项提供合理的默认值。
解析 Loaders
高速缓存
请参阅解析API以了解有关上述配置选项的更多信息。