DllPlugin

DllPluginDllReferencePlugin 提供了一种分割包的方式,可以极大地提高构建时间性能。术语“DLL”代表动态链接库,最初由 Microsoft 引入。

DllPlugin

此插件在单独的 webpack 配置中使用,专门用于创建仅限 dll 的包。它创建一个 manifest.json 文件,该文件由 DllReferencePlugin 用于映射依赖项。

  • context(可选):清单文件中的请求上下文(默认为 webpack 上下文。)
  • format(布尔值 = false):如果为 true,清单 json 文件(输出)将被格式化。
  • name:公开的 dll 函数的名称(TemplatePaths[fullhash][chunkhash][contenthash][name]
  • path:清单 json 文件(输出)的绝对路径
  • entryOnly(布尔值 = true):如果为 true,则仅公开入口点
  • type:dll 包的类型
new webpack.DllPlugin(options);

创建一个 manifest.json,将其写入给定的 path。它包含从 require 和 import 请求到模块 ID 的映射。它由 DllReferencePlugin 使用。

将此插件与 output.library 选项结合使用,以公开(又名,放入全局作用域)dll 函数。

DllReferencePlugin

此插件在主 webpack 配置中使用,它引用仅限 dll 的包以需要预构建的依赖项。

  • context:(绝对路径)清单(或内容属性)中的请求上下文
  • extensions:用于解析 dll 包中模块的扩展名(仅在使用“scope”时使用)。
  • manifest:包含 contentname 的对象,或指向编译时要加载的 JSON 清单的绝对路径的字符串
  • content(可选):从请求到模块 ID 的映射(默认为 manifest.content
  • name(可选):dll 暴露的标识符(默认为 manifest.name)(另请参见 externals
  • scope(可选):用于访问 dll 内容的前缀
  • sourceType(可选):dll 暴露的方式(libraryTarget
new webpack.DllReferencePlugin(options);

引用 dll 清单文件,以将依赖项名称映射到模块 ID,然后使用内部 __webpack_require__ 函数根据需要引用它们。

模式

此插件可用于两种不同的模式,范围映射

范围模式

dll 的内容可在模块前缀下访问。即,如果 scope = 'xyz',则可以通过 require('xyz/abc') 访问 dll 中的文件 abc

映射模式

dll 的内容映射到当前目录。如果所需文件与 dll 中的文件匹配(在解析后),则将使用 dll 中的文件代替。

由于这发生在解析 dll 捆绑包中的每个文件之后,因此 dll 捆绑包的使用者必须可以使用相同的路径。即,如果 dll 包含 lodash 和文件 abc,则 require('lodash')require('./abc') 将从 dll 中使用,而不是将它们构建到主捆绑包中。

用法

webpack.vendor.config.js

const path = require('path');

new webpack.DllPlugin({
  context: __dirname,
  name: '[name]_[fullhash]',
  path: path.join(__dirname, 'manifest.json'),
});

webpack.app.config.js

new webpack.DllReferencePlugin({
  context: __dirname,
  manifest: require('./manifest.json'),
  scope: 'xyz',
  sourceType: 'commonjs2',
});

示例

供应商用户

两个独立的示例文件夹。演示范围和上下文。

引用

测试

延伸阅读

9 位贡献者

aretecodesokraopiepjsimon04skipjackbyzykEugeneHlushkoEslamHikosnitin315