DllPlugin
和 DllReferencePlugin
提供了一种分割包的方式,可以极大地提高构建时间性能。术语“DLL”代表动态链接库,最初由 Microsoft 引入。
此插件在单独的 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 函数。
此插件在主 webpack 配置中使用,它引用仅限 dll 的包以需要预构建的依赖项。
context
:(绝对路径)清单(或内容属性)中的请求上下文extensions
:用于解析 dll 包中模块的扩展名(仅在使用“scope”时使用)。manifest
:包含 content
和 name
的对象,或指向编译时要加载的 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',
});
两个独立的示例文件夹。演示范围和上下文。