CC 4.0 协议声明

本节内容派生于以下链接指向的内容 ,并遵守 CC BY 4.0 许可证的规定。

以下内容如果没有特殊声明,可以认为都是基于原内容的修改和删减后的结果。

ContextReplacementPlugin

context 是指带有表达式的 require 或动态 import(),例如 require('./locale/' + name + '.json') 遇到这种表达式时,Rspack 会推断出目录('./locale/')和一个正则表达式(/^.*.json$/)。 由于在编译时无法确定 name,Rspack 会将每个文件都作为模块打包。

ContextReplacementPlugin 允许你覆盖这些推断的信息。该插件可以通过多种方式进行配置:

选项

  • 类型:
new rspack.ContextReplacementPlugin(
  resourceRegExp: RegExp,
  newContentResource?: string,
  newContentRecursive?: boolean,
  newContentRegExp?: RegExp
)

如果目录匹配 resourceRegExp,插件会用 newContentResourcenewContentRecursivenewContextRegExp 分别替换默认资源、递归标志或生成的正则表达式。 如果 newContentResource 是相对路径,则相对于前一个资源进行解析。

示例

基本使用

new rspack.ContextReplacementPlugin(/moment[/\\]locale$/, /de|fr|hu/);

这个示例限制了 moment/locale 目录下的文件,仅打包匹配 /de|fr|hu/ 的文件。因此,仅包含这些语言模块(在这里了解更多信息)。

其他选项

关于 newContentResourcenewContentCreateContextMap 参数:

new rspack.ContextReplacementPlugin(
  resourceRegExp: RegExp,
  newContentResource: string,
  newContentCreateContextMap: object // 映射运行时请求(userRequest)到编译时请求(request)
);

这两个参数可以一起使用,以更有针对性地重定向请求。newContentCreateContextMap 允许你以对象的形式映射运行时请求到编译时请求:

new rspack.ContextReplacementPlugin(/selector/, './folder', {
  './request': './request',
  './other-request': './new-request',
});