Wbpack在启动后会从配置的入口模块会出发找到所有的依赖模块,而Resolve就是配置webpack如何寻找模块所对应的文件。

alias

resolve.alias 配置项通过别名来把原导入路径映射成一个新的导入路径。例如使用以下配置:

  1. // Webpack alias 配置
  2. resolve:{
  3. alias:{
  4. components: './src/components/'
  5. }
  6. }

设置之后我们在项目中引用的话就直接使用import components 相当于直接引用了import ‘./src/components/‘
可以使用$符合缩小范围只匹配到以关键字结尾的导入语句

  1. resolve:{
  2. alias:{
  3. 'react$': '/path/to/react.min.js'
  4. }
  5. }

mainFields

有一些第三方模块会针对不同环境提供几分代码。 例如分别提供采用 ES5 和 ES6 的2份代码,这2份代码的位置写在 package.json 文件里,如下:

  1. {
  2. "jsnext:main": "es/index.js",// 采用 ES6 语法的代码入口文件
  3. "main": "lib/index.js" // 采用 ES5 语法的代码入口文件
  4. }

假如你想优先采用 ES6 的那份代码,可以这样配置:

  1. mainFields: ['jsnext:main', 'browser', 'main']

extensions

在项目中导入文件可以不带类型.js等文件类型,但是会有一个类型数组去匹配解析[js.json]先去匹配js文件如果找不到再去寻找json文件,当我们的项目是以ts为类型的所以我们需要设置ts优先执行。

  1. extensions: ['.ts', '.js', '.json']

modules

resolve.modules 配置 Webpack 去哪些目录下寻找第三方模块,默认是只会去 node_modules 目录下寻找。 有时你的项目里会有一些模块会大量被其它模块依赖和导入,由于其它模块的位置分布不定,针对不同的文件都要去计算被导入模块文件的相对路径, 这个路径有时候会很长,就像这样 import ‘../../../components/button’ 这时你可以利用 modules 配置项优化,假如那些被大量导入的模块都在 ./src/components 目录下,把 modules 配置成

  1. modules:['./src/components','node_modules']

后,你可以简单通过 import ‘button’ 导入。

descriptionFiles

resolve.descriptionFiles 配置描述第三方模块的文件名称,也就是 package.json 文件。默认如下:

  1. descriptionFiles: ['package.json']

enforceExtension

resolve.enforceExtension 如果配置为 true 所有导入语句都必须要带文件后缀, 例如开启前 import ‘./foo’ 能正常工作,开启后就必须写成 import ‘./foo.js’。

enforceModuleExtension

enforceModuleExtension 和 enforceExtension 作用类似,但 enforceModuleExtension 只对 node_modules 下的模块生效。 enforceModuleExtension 通常搭配 enforceExtension 使用,在 enforceExtension:true 时,因为安装的第三方模块中大多数导入语句没带文件后缀, 所以这时通过配置 enforceModuleExtension:false 来兼容第三方模块。