For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt, and this page is available as Markdown at /zh/plugins/externals-plugin.md.
close

ExternalsPlugin

ExternalsPlugin 将指定依赖排除在 bundle 之外,并生成在运行时访问这些依赖的代码。例如,外部依赖可以通过 ES 模块 import 引用,也可以来自其他脚本提供的浏览器全局变量。

对于大多数项目,直接配置 externals 和 externalsType 即可,Rspack 会在内部应用 ExternalsPlugin。如果需要在其他插件中添加外部依赖规则,或通过多个插件实例分别设置 externalsType,可以直接使用该插件。

示例

ESM 导入

启用 output.module,并将 externalsType 设为 'module',可以将 react 排除在 bundle 之外,同时在产物中生成对它的 ES 模块导入:

rspack.config.mjs
import { rspack } from '@rspack/core';

export default {
  output: {
    module: true,
  },
  plugins: [new rspack.ExternalsPlugin('module', ['react'])],
};

产物的使用方需要能够解析 react 导入。例如,后续的打包工具可以解析它,浏览器也可以通过 import map 将它映射到 URL。字符串规则只会精确匹配 react,不会匹配 react/jsx-runtime 等子路径。

对于这个例子,对应的配置项写法是:

rspack.config.mjs
export default {
  output: {
    module: true,
  },
  externalsType: 'module',
  externals: ['react'],
};

浏览器全局变量

如果页面已经通过脚本加载 Lodash,并提供了 window._,可以将 lodash 请求映射到这个全局变量:

rspack.config.mjs
import { rspack } from '@rspack/core';

export default {
  plugins: [new rspack.ExternalsPlugin('window', { lodash: '_' })],
};

应用代码仍然可以使用 import _ from 'lodash'。bundle 会读取 window._,而不包含 Lodash,因此应先加载提供该变量的脚本,再执行 bundle。

选项

第一个参数指定 externalsType,第二个参数 externals 指定匹配规则:

new rspack.ExternalsPlugin(externalsType, externals);

externalsType

  • 类型: ExternalsType
  • 是否必填: 是

决定运行时如何访问匹配的依赖。

应根据产物格式和运行环境选择 externalsType。完整的可选值及其使用条件见 externalsType。

单条规则可以在结果中添加类型前缀,以覆盖 externalsType:

new rspack.ExternalsPlugin('module', {
  react: 'react',
  lodash: 'window _',
});

在启用 output.module 时,react 通过 ES 模块导入,而 lodash 从 window._ 读取。

externals

  • 类型: Externals
  • 是否必填: 是

指定哪些模块请求应作为外部依赖,以及如何引用它们。规则匹配的是源码中的模块请求,此时请求尚未被解析为文件路径。

支持的规则形式和值格式见 externals 配置参考。如需自定义匹配逻辑或解析请求,见函数形式。