16_webpack的resolve

resolve模块解析

resolve用于设置模块如何被解析;

在开发中我们会有各种的模块依赖,这些模块可能来源于自己编写的代码,也可能是第三方库

resolve可以帮助我webpack从每个require/import语句中,找到需要引入到合适的模块代码

webpack使用enhanced-resolve来解析文件路径

webpack能解析三种文件路径
  绝对路径:不需要再进一步解析
  相对路径:在这种情况下,使用import或require的资源文件所处的目录,被认为是上下文目录
       在import/require中给定的相对路径,会拼接此上下文路径,来生成模板的绝对路径

  模块路径:在resolve.modules中指定的所有目录检索模块
       默认值是['node_module'],所以默认会从node_modules中查找文件;
       我们可以通过设置别名的方式来替换初始模块路径,alias的配置

 

确认是文件还是文件夹

如果是一个文件:

  如果文件具有扩展名,则直接打包文件
  否则,将使用resolve.extensions选项作为文件扩展名解析

  resolve.extensions的默认扩展名:

    [string] = ['.js', '.json', '.wasm']

    尝试按顺序解析这些扩展。如果多个文件共享相同的名称但具有不同的扩展名,webpack 将解析扩展名在数组中首先列出的扩展名,并跳过其余扩展名。

  如果找不到的话,就会直接报错

如果是一个文件夹:
  会在文件夹中根据resolve.mainFiles配置选项中指定的文件顺序查找
  resolve.mainFiles的默认值是['index'];
  再根据resolve.extensions来解析扩展名

 

extensions和alias配置

extensions是解析到文件时自动添加扩展名
  默认值为['.js', '.json', '.wasm']
  所以我们代码中需要加载.vue文件时,我们需要去配置extensions

 resolve: {
    extensions: [".vue", ".js"],
  },

另一个非常好用的功能是配置别名alias

  当我们目录层级比较深的时候,我们在项目中去映入一个文件可能需要../../../这种路径
  我们可以给某些常见的路径起一个别名

resolve: {
    extensions: [".vue", ".js"],
    alias: {
      "@": path.resolve(__dirname, "./src"),
      pages: path.resolve(__dirname, "./src/pages"),
    },
  },

那么我们要引入层级比较深的文件的时候就只需要

// import main from '../../../js/main.js';
import main from '@/js/main.js';

 

posted @ 2022-04-25 23:08  Mr-Hou88888  阅读(228)  评论(0编辑  收藏  举报