@wordpress/dependency-extraction-webpack-plugin语言

此webpack插件有两个用途:

  • 外部化WordPress站点上作为共享脚本或模块可用的依赖项。
  • 为每个入口点添加一个资产文件,该文件使用入口点的WordPress脚本或模块依赖项列表声明一个对象。资产文件还包含为当前源代码计算的当前版本。

这允许webpack生成的JavaScript捆绑包利用WordPress风格的依赖项共享,而无需手动维护依赖项列表这一容易出错的过程。

该插件的版本5增加了对模块绑定的支持。Webpack的输出模块选项应该
用于选择此行为。此插件将根据
输出模块选项,生成适用于WordPress模块API的资产文件。

请咨询webpack网站有关webpack概念的更多信息。

安装

安装模块

npm install@wordpress/dependency-extraction-webpack-plugin--保存-dev

注释:此软件包要求Node.js版本具有长期支持状态(请检查活动LTS或维护LTS版本). 它还需要webpack 5.0.0或更新版本。它与旧版本不兼容。

用法

网络包

像使用其他webpack插件一样使用此插件:

//webpack.config.jsconst DependencyExtractionWebpackPlugin=require('@wordpress/dependence extraction webpack-plugin');模块导出={//…剪刀插件:[new DependencyExtractionWebpackPlugin()],};

注:不支持插件的多个实例,可能会产生意外结果。如果您计划从扩展webpack配置@wordpress/脚本用你自己的依赖项提取WebpackPlugin,请确保删除插件的默认实例:

const defaultConfig=require('@wordpress/scripts/config/webpack.config');const webpackConfig={…默认配置,插件:[…defaultConfig.plugins.filter(默认配置插件过滤器)((插件)=>plugin.constructor.name!=='DependencyExtractionWebpackPlugin'),新的DependencyExtractionWebpackPlugin({注入聚合物:真,requestToExternal(请求){/*我的外衣*/},} ),],};

脚本行为

webpack捆绑包中的每个入口点都将包含一个资产文件,该文件声明应该排队的WordPress脚本依赖项。此文件还包含根据文件内容计算的唯一版本哈希。

例如:

//源文件入口点.js从'react'导入{Component};//Webpack将生成输出output/entrypoint.js/*捆绑的JavaScript输出*///Webpack还将生成output/entrypoint.asset.php,声明脚本依赖项<?php返回数组(“dependencies”=>数组(“react”),“version”=>“dd4c2dc50d046ed9d4c063a7ca95702f”);

默认情况下,处理以下模块请求:

请求 全球的 脚本句柄
@babel/运行时/再生器 再生器运行时间 wp-聚乙烯填料
@文字出版社/* wp[“*”] 水处理-*
jquery(jquery) jQuery(jQuery) jquery(jquery)
洛达什·埃斯 洛达什 洛达什
洛达什 洛达什 洛达什
瞬间 瞬间 瞬间
反应室 反应DOM 反应室
反应 反应 反应

注:此插件与提供的功能重叠网络包外部。此插件旨在从包编译中提取脚本句柄,以便不需要手动维护脚本依赖项列表。如果不需要提取脚本依赖项列表,请使用外部选项。

此插件与兼容外部,但它们可能会发生冲突。例如,添加{外部:{“@wordpress/blob”:“wp.blob”}}到webpack配置将有效地隐藏@文字新闻/blob模块,它不会包含在依赖项列表中。

脚本模块的行为

警告:脚本模块支持目前被认为是实验性的。

本节描述了这个包绑定ECMAScript模块和生成资产的行为
适合与WordPress脚本模块API一起使用的文件。

这个插件的一些选项发生了变化,webpack需要配置才能输出脚本模块。请参阅
webpack文档获取最新详细信息。

const webpackConfig={…默认配置,//这些行是在编写时启用模块编译所必需的:输出:{module:true},实验:{outputModule:true},插件:[…默认配置.plugins.filter((插件)=>plugin.constructor.name!=='依赖项提取WebpackPlugin),新的DependencyExtractionWebpackPlugin({//对于模块,使用`requestToExternalModule`:请求到外部模块(请求){if(请求===“my-registered-module”){退货请求;}},} ),],};

webpack捆绑包中的每个入口点都将包含一个资产文件,该文件声明应该排队的WordPress脚本模块依赖项。此文件还包含基于文件内容计算的唯一版本哈希。

例如:

//源文件入口点.js从“@wordpress/interactivity”导入{store,getContext};//Webpack将生成输出output/entrypoint.js/*捆绑的JavaScript输出*///Webpack还将生成output/entrypoint.asset.php,声明脚本依赖项<?php返回数组('dependencies'=>数组('@wordpress/interactive'),'version'=>'dd4c2dc50d046ed9d4c063a7ca95702f');

默认情况下,将处理以下脚本模块请求:

请求
@wordpress/互动

(@wordpress/互动是目前唯一可用的WordPress脚本模块。)

注:此插件与提供的功能重叠网络包外部。此插件旨在从包编译中提取脚本模块标识符,以便不需要手动维护脚本模块依赖项列表。如果不需要提取脚本模块依赖项列表,请使用外部选项。

此插件与兼容外部,但它们可能会发生冲突。例如,添加{外部:{“@wordpress/blob”:“wp.blob”}}到webpack配置将有效地隐藏@文字新闻/blob模块,它不会包含在依赖项列表中。

选项

可以将对象传递给构造函数以自定义行为,例如:

模块导出={插件:[新的DependencyExtractionWebpackPlugin({injectPolyfill:true}),],};
输出格式
  • 类型:字符串
  • 违约:php(电话)

生成的资源文件的输出格式。有两个可用选项:“php”或“json”。

输出文件名
  • 类型:字符串|函数
  • 默认值:null

生成的资源文件的文件名。接受与Webpack相同的值输出.filename选项。

组合资产
  • 类型:布尔型
  • 违约:

默认情况下,为每个入口点创建一个资源文件。当此标志设置为真的,有关资产的所有信息都合并为一个资产。(json | php)在输出目录中生成的文件。

组合输出文件
  • 类型:字符串
  • 违约:无效的

此选项仅在联合资产选项已启用。它允许为生成的单个资源文件提供自定义输出文件。可以提供相对于输出目录的路径。

使用默认值
  • 类型:布尔型
  • 违约:真的

通过使用默认值:false禁用默认请求处理。

注射聚乙烯
  • 类型:布尔型
  • 违约:

武力wp-聚乙烯填料以包括在每个入口点的依赖性列表中。这与添加导入“@wordpress/polyfill”;到每个入口点。

注释:此选项不适用于脚本模块。

外部化报表
  • 类型:boolean | string
  • 违约:

以JSON格式将所有外部化的依赖项报告为数组。它可以用于进一步的手动或自动检查。
您可以提供文件名,或将其设置为真的向默认值报告外部化依赖关系.json.

请求到外部

注释:此选项不适用于脚本模块。请参阅请求到外部模块用于模块使用。

  • 类型:功能

请求到外部允许自定义模块处理。该函数应接受模块请求字符串,并可能返回表示要使用的全局变量的字符串。字符串数组可用于通过对象路径访问全局变量,例如。每磅18英寸可以表示为[“wp”,“i18n”].

请求到外部通过配置提供的优先级高于默认的外部处理。默认情况下,将处理未处理的请求,除非使用默认值设置为.

/***外部化“my-module”**@param{string}request请求的模块**@return{(字符串|未定义)}脚本全局*/函数requestToExternal(请求){//处理导入,例如“从my-module导入myModule”`if(请求===“my-module”){//期望在全局范围内找到“my-module”作为myModule:return'myModule';}}模块导出={插件:[new DependencyExtractionWebpackPlugin({requestToExternal})],};
请求到外部模块

注释:此选项仅适用于脚本模块。请参阅请求到外部用于脚本使用。

  • 类型:功能

请求到外部模块允许自定义脚本模块处理。该函数应接受脚本模块请求字符串,并可能返回表示要使用的脚本模块的字符串。通常,脚本模块将具有相同的名称。

请求到外部模块通过配置提供的优先级高于默认的外部处理。默认情况下,将处理未处理的请求,除非使用默认值设置为.

/***外部化“my-module”**@param{string}request请求的脚本模块**@return{(string|boolean|undefined)}脚本模块ID*/函数requestToExternalModule(请求){//处理导入,例如“从my-module导入myModule”`if(请求===“my-module”){//导入的格式应为`Import{something}from“myModule”;`在最后的捆绑中。return'myModule';}//如果源中的脚本模块ID与外部脚本模块相同,则可以返回“true”。return request===“external-module-id-no-change-required”;}模块导出={插件:[新的DependencyExtractionWebpackPlugin({requestToExternalModule}),],};
请求处理

注释:此选项不适用于脚本模块。它没有相应的模块配置。

  • 类型:功能

插件处理的所有外部模块都应该是WordPress脚本依赖项
并将添加到依赖项列表中。请求处理允许自定义依赖项列表中包含的脚本句柄。

如果没有返回字符串,则假定脚本句柄与请求相同。

请求处理通过配置提供的优先级高于默认值。默认情况下,将处理未处理的请求,除非使用默认值设置为.

/***将“my-module”请求映射到“my-model-script-handle”**@param{string}request请求的模块**@return{(string|undefined)}编写全局脚本*/函数requestToHandle(请求){//处理导入,例如“从my-module导入myModule”`if(请求===“my-module”){//“my-module”依赖于带有“my-mmodule-script-handle”句柄的脚本。return“my-module-script-handle”;}}模块导出={插件:[new DependencyExtractionWebpackPlugin({requestToHandle})],};
请求到外部请求处理

功能请求到外部请求处理允许此模块处理任意模块。

请求到外部是处理任何模块所必需的,并将模块请求映射到全局名称。

请求处理将同一模块请求映射到脚本句柄,该脚本句柄中包含的字符串入口点资产.php文件夹。

WordPress(文字出版社)

像往常一样将脚本排队并动态读取脚本依赖项:

$script_path='path/to/script.js';$script_asset_path=“路径/to/script.asset.php”;$script_asset=文件存在($script_aasset_path)? 需要($script_asset_path):array(“dependencies”=>array(),“version”=>filemtime($script_path));$script_url=插件url($script_path,__FILE_);wp_enqueue_script('script',$script_url,$script_asset['dependencies'],$script_asset['版本']);

或者使用模块(脚本模块API仅在WordPress>6.5中可用):

$module_path='path/to/module.js';$module_asset_path=“路径/to/module.asset.php”;$module_asset=文件存在($module_asset_path)? 需要($module_asset_path):array(“dependencies”=>array(),“version”=>filemtime($module_path));$module_url=插件_url($module_path,__FILE__);wp_register_script_module('my-module',$module_url,$modulate_asset['dependencies'],$module_asset['版本']);wp_enqueue_script_module(“我的模块”);

参与此包

这是古腾堡项目的一部分。该项目组织为单回购。它由多个独立的软件包组成,每个软件包都有特定的用途。此monorepo中的包发布到净现值法并由使用WordPress(文字出版社)以及其他软件项目。

要了解更多关于对这个包或古腾堡整体贡献的信息,请阅读该项目的主要内容贡献者指南.