Resolve
Resolve 配置 Webpack 如何寻找模块所对应的文件
alias
resolve.alias
配置项通过别名来把原导入路径映射成一个新的导入路径。例如使用以下配置:
// Webpack alias 配置
resolve:{
alias:{
components: './src/components/'
}
}
alias
还支持 $
符号来缩小范围到只命中以关键字结尾的导入语句
resolve:{
alias:{
'react$': '/path/to/react.min.js'
}
}
react$
只会命中以 react
结尾的导入语句,即只会把 import 'react'
关键字替换成 import '/path/to/react.min.js'
。
mainFields
{
"jsnext:main": "es/index.js",// 采用 ES6 语法的代码入口文件
"main": "lib/index.js" // 采用 ES5 语法的代码入口文件
}
Webpack 会根据 mainFields
的配置去决定优先采用那份代码,mainFields
默认如下:
mainFields: ['browser', 'main']
extensions
在导入语句没带文件后缀时,Webpack 会自动带上后缀后去尝试访问文件是否存在。 resolve.extensions
用于配置在尝试过程中用到的后缀列表,默认是:
extensions: ['.js', '.json']
也就是说当遇到 require('./data')
这样的导入语句时,Webpack 会先去寻找 ./data.js
文件,如果该文件不存在就去寻找 ./data.json
文件, 如果还是找不到就报错。
假如你想让 Webpack 优先使用目录下的 TypeScript 文件,可以这样配置:
extensions: ['.ts', '.js', '.json']
module
resolve.modules
配置 Webpack 去哪些目录下寻找第三方模块,默认是只会去 node_modules
目录下寻找.
路径太长 import '../../../components/button'
这时可以利用 modules
配置项优化,假如那些被大量导入的模块都在 ./src/components
目录下,把 modules
配置成
modules:['./src/components','node_modules']
后,你可以简单通过 import 'button'
导入。
description
resolve.descriptionFiles
配置描述第三方模块的文件名称,也就是 package.json
文件。默认如下:
descriptionFiles: ['package.json']
enforceExtension
resolve.enforceExtension
如果配置为 true
所有导入语句都必须要带文件后缀, 例如开启前 import './foo'
能正常工作,开启后就必须写成 import './foo.js'
。
enforceModuleExtension
enforceModuleExtension
和 enforceExtension
作用类似,但 enforceModuleExtension
只对 node_modules
下的模块生效。 enforceModuleExtension
通常搭配 enforceExtension
使用,在 enforceExtension:true
时,因为安装的第三方模块中大多数导入语句没带文件后缀, 所以这时通过配置 enforceModuleExtension:false
来兼容第三方模块。