gutenbergdocs/getting-started/fundamentals/javascript-in-the-block-editor.md
2025-10-22 01:33:45 +08:00

6.4 KiB
Raw Blame History

区块编辑器中的JavaScript开发

为区块编辑器开发区块通常涉及使用现代JavaScriptESNext和JSX本手册中的大多数示例都采用这些语法编写。

然而这种形式的JavaScript必须转换为浏览器兼容的格式因此需要构建步骤。这个过程会将JavaScript源代码及相关资源进行转换、打包和优化最终生成适用于生产环境的格式。

使用构建流程的JavaScript开发

采用构建流程进行区块开发能充分发挥现代JavaScript的潜力便于使用ESNext和JSX。

ESNext 指的是JavaScript的最新语法和特性。JSX 是React项目开发的语法扩展允许您编写类似HTML的JavaScript代码。

由于浏览器无法直接执行ESNext和JSX这些语法必须转换为浏览器兼容的JavaScript。

webpack 是一个可插拔工具用于处理和打包JavaScript以实现浏览器兼容性。Babel 作为webpack的插件能够将ESNext和JSX转换为标准JavaScript。

配置webpack和Babel可能具有挑战性因此建议使用 @wordpress/scripts 工具包。该工具通过预配置两者来简化开发您通常无需编写自定义的webpack或Babel配置。

入门指南请参阅 wp-scripts入门指南

wp-scripts概览

下图概述了使用wp-scripts工具包时的构建流程。该工具专为开发和生产环境的标准配置设计,开箱即用。

打开构建流程图

  • 生产模式 (npm run build): 在此模式下,wp-scripts会编译JavaScript并对输出进行压缩以减小文件大小并提升浏览器加载速度。这非常适合将代码部署至生产环境。

  • 开发模式 (npm start): 此模式专为活跃开发定制。它会跳过压缩以便于调试,生成源码映射以优化错误追踪,并监听源文件变更。当检测到更改时,会自动重建受影响文件,让您可以实时查看更新。

wp-scripts工具包还支持使用JavaScript模块允许代码分布在多个文件中并在构建流程后生成精简的打包文件。block-development-example GitHub代码库提供了一些优秀示例。

大多数情况下无需自定义配置,但您可以在使用wp-scripts时提供webpack.config.js文件来调整构建流程以满足需求。

无构建流程的JavaScript开发

在某些特定场景下无需构建流程即可将JavaScript集成到WordPress项目中可能是最直接的方法。这对于不涉及JSX或其他需要编译的高级JavaScript特性的项目尤为适用。

当您选择不使用构建流程时,需通过全局wp对象直接与WordPress的JavaScript API进行交互。这意味着WordPress提供的所有方法和工具包都立即可用但需要注意您必须手动管理脚本依赖关系。这需要将每个对应工具包的句柄添加到您入队JavaScript文件的依赖数组中。

例如,假设您正在创建一个使用blocks工具包中的registerBlockVariation函数来注册新区块变体的脚本。您必须在脚本的依赖数组中包含wp-blocks。这能确保在脚本执行时,wp.blocks.registerBlockVariation方法可用且已定义。

以下示例展示了在入队variations.js文件时定义wp-blocks依赖项:

function example_enqueue_block_variations() {
	wp_enqueue_script(
		'example-enqueue-block-variations',
		get_template_directory_uri() . '/assets/js/variations.js',
		array( 'wp-blocks' ),
		wp_get_theme()->get( 'Version' ),
		false
	);
}
add_action( 'enqueue_block_editor_assets', 'example_enqueue_block_variations' );

然后在variations.js文件中,您可以像这样为"媒体与文本"区块注册新变体:

wp.blocks.registerBlockVariation(
	'core/media-text',
	{
		name: 'media-text-custom',
		title: '自定义媒体与文本',
		attributes: {
			align: 'wide',
			backgroundColor: 'tertiary'
		},
	}
);

对于需要在区块编辑器中运行的脚本,请确保使用enqueue_block_editor_assets钩子配合标准的wp_enqueue_script函数。

更多信息请参阅在编辑器中加载资源

在编辑文章或使用站点编辑器时,打开浏览器开发者工具并在控制台中尝试运行wp.data.select('core/editor').getBlocks()。此命令将返回所有可用区块。

扩展资源