CC 4.0 许可证

本节内容来源于以下链接,并受 CC BY 4.0 许可证保护。

除非另有说明,以下内容可被认为是基于原始内容的修改和删除的结果。

解析

用于配置 Rspack 模块解析逻辑。

  • 类型: Object

resolve.alias

  • 类型: Record<string, false | string | (string | false)[]>
  • 默认值: {}

路径别名,例如:

{ "@": path.resolve(__dirname, './src'), "abc$": path.resolve(__dirname, './node_modules/abc/index.js'), }

此时

  • require("@/a") 将尝试解析 <root>/src/a
  • require("abc") 将尝试解析 <root>/src/abc
  • require("abc/file.js") 将不会匹配,并且它将尝试解析 node_modules/abc/file.js

resolve.aliasFields

  • 类型: string[]
  • 默认值: ['browser']

定义一个字段,例如 browser,它应该根据 此规范 进行解析。

resolve.conditionNames

  • 类型: string[]
  • 默认值: []

与 node 的 conditionNames 相同,用于 package.json 中的 exportsimports 字段。

resolve.descriptionFiles

  • 类型: string[]
  • 默认值: ['package.json']

用于描述的 JSON 文件。

rspack.config.js
module.exports = {
  resolve: {
    descriptionFiles: ['package.json'],
  },
};

resolve.enforceExtension

  • 类型: boolean

默认情况下,如果 resolve.extensions 包含空字符串,则它将更改为 true;否则,此值将更改为 false

如果为 true,则不允许使用无扩展名的文件。因此,默认情况下 require('./foo') 如果 ./foo 具有 .js 扩展名,则可以正常工作,但如果启用了此选项,则只有 require('./foo.js') 才可以正常工作。

rspack.config.js
module.exports = {
  resolve: {
    enforceExtension: false,
  },
};

resolve.extensions

  • 类型: string[]
  • 默认值: [".js", ".json", ".wasm"]

按顺序解析模块,例如 require('. /index'),将尝试解析 '. /index.js''. /index.json'...

resolve.extensionAlias

  • 类型: Record<string, string[] | string>
  • 默认值: {}

定义扩展名的别名。例如:

rspack.config.js
module.exports = {
  resolve: {
    extensionAlias: {
      '.js': ['.ts', '.js'],
    },
  },
};

这对 TypeScript 项目特别有用,因为 TypeScript 建议使用 .js 扩展名引用 TypeScript 文件。

index.ts
import { foo } from './foo.js'; // actually refers to `foo.ts`

Rspack 在解析 import './foo.js' 时,将依次尝试解析 './foo.ts'./foo.js'

resolve.fallback

  • 类型: Record<string, false | string>
  • 默认值: {}

当正常解析失败时,重定向模块请求。

rspack.config.js
module.exports = {
  //...
  resolve: {
    fallback: {
      abc: false, // do not include a polyfill for abc
      xyz: path.resolve(__dirname, 'path/to/file.js'), // include a polyfill for xyz
    },
  },
};

Rspack 不会自动填充 Node.js 核心模块,这意味着如果您在浏览器或类似环境中运行的代码中使用它们,则必须从 NPM 安装兼容的模块并自行包含它们。

您可以使用 node-polyfill-webpack-plugin 自动填充 Node.js 核心 API。

rspack.config.js
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin');

module.exports = {
  // ...
  plugins: [new NodePolyfillPlugin()],
};

或者参考 webpack 4 使用的 Node.js 填充列表

rspack.config.js
module.exports = {
  //...
  resolve: {
    fallback: {
      assert: require.resolve('assert'),
      buffer: require.resolve('buffer'),
      console: require.resolve('console-browserify'),
      constants: require.resolve('constants-browserify'),
      crypto: require.resolve('crypto-browserify'),
      domain: require.resolve('domain-browser'),
      events: require.resolve('events'),
      http: require.resolve('stream-http'),
      https: require.resolve('https-browserify'),
      os: require.resolve('os-browserify/browser'),
      path: require.resolve('path-browserify'),
      punycode: require.resolve('punycode'),
      process: require.resolve('process/browser'),
      querystring: require.resolve('querystring-es3'),
      stream: require.resolve('stream-browserify'),
      string_decoder: require.resolve('string_decoder'),
      sys: require.resolve('util'),
      timers: require.resolve('timers-browserify'),
      tty: require.resolve('tty-browserify'),
      url: require.resolve('url'),
      util: require.resolve('util'),
      vm: require.resolve('vm-browserify'),
      zlib: require.resolve('browserify-zlib'),
    },
  },
};

resolve.importsFields

  • 类型: string[]
  • 默认值: ["imports"]

自定义 package.json 中的 imports 字段,用于提供包的内部请求(以 # 开头的请求被视为内部请求)。

例如:

// package.json { "name": "lib", "imports": { "#foo": "./src/foo.js", "#common/*": "./src/common/*.js" } "testImports": { "#foo": "./src/test/foo.js", } }

当此配置为 ["testImports", "imports"] 时,当前包中 import value from '#foo' 的结果为 src/test/foo.js

resolve.mainFields

  • 类型: string[]
  • 默认值
    • target["browser", "module", "main"] 当它是 web 时
    • ["module", "main"] 用于其他情况

尝试解析 package.json 中的字段,例如:

// package.json
{
  "name": "lib",
  "module": "es/index.js"
}

那么 import value from 'lib' 将解析为 lib/es/index.js

resolve.mainFiles

  • 类型: string[]
  • 默认值: ["index"]

解析目录时的文件名后缀,例如 require('. /dir/') 将尝试解析 '. /dir/index'

resolve.exportsFields

  • 类型: string[]
  • 默认值: ["exports"]

自定义 package.json 中的 exports 字段。例如:

// lib/package.json
{
  "name": "lib",
  "testExports": {
    ".": "./test.js"
  },
  "exports": {
    ".": "./index.js"
  }
}

当此配置为 ["testExports", "exports"] 时,import value from 'lib' 的结果为 lib/test.js

resolve.modules

  • 类型: string[]
  • 默认值: ["node_modules"]

解析依赖项时使用的目录名称。

resolve.preferRelative

  • 类型: boolean
  • 默认值: false

启用后,require('file') 将首先在当前目录中查找 . /file 文件,而不是 <modules>/file

resolve.preferAbsolute

  • 类型: boolean
  • 默认值: false

在解析时选择相对于 resolve.roots 的绝对路径。

resolve.tsConfig

  • 类型: string | object | undefined
  • 默认值: undefined

在 Rspack 中替换 tsconfig-paths-webpack-plugin

rspack.config.js
module.exports = {
  resolve: {
    // string
    tsConfig: path.resolve(__dirname, './tsconfig.json'),
    // or object
    tsConfig: {
      configFile: path.resolve(__dirname, './tsconfig.json'),
      references: 'auto',
    },
  },
};

点击查看示例.

resolve.tsConfig.configFile

  • 类型: string

如果您通过选项传递 tsconfig.json 的路径,Rspack 将尝试根据 tsconfig.jsonpathsbaseUrl 来解析模块,功能等同于 tsconfig-paths-webpack-plugin

resolve.tsConfig.references

  • 类型: string[] | "auto" | undefined
  • 默认值: undefined

支持 tsconfig 项目引用,如 tsconfig-paths-webpack-plugin 中定义的那样。

可以手动提供 tsconfig 路径列表,或者指定 autotsconfig.references 自动读取路径列表。

当值为 undefined 时,此功能被禁用。

resolve.fullySpecified

  • 类型: boolean
  • 默认值: false

不再解析扩展名,不再解析 package.json 中的 mainFiles(但不影响来自 mainFiles、browser、alias 的请求)。

resolve.restrictions

  • 类型: string[]
  • 默认值: []

一个 resolve 限制列表,用于限制请求可以在哪些路径上解析。

resolve.roots

  • 类型: string[]
  • 默认值: []

一个目录列表,用于解析与服务器相关的 URL(以 '/' 开头)。它默认为 context 配置选项。在 Windows 以外的系统上,这些请求最初被解析为绝对路径。

  • 类型: boolean
  • 默认值: true

是否将符号链接解析到其符号链接的位置。

启用后,符号链接的资源将解析到其真实路径,而不是其符号链接的位置。请注意,当使用符号链接包的工具(如 npm link)时,这可能会导致模块解析失败。

resolve.byDependency

  • 类型: Record<string, Resolve>

根据模块类型自定义 Resolve 配置。