函数文档

wp_register_development_scripts()

💡 云策文档标注

概述

wp_register_development_scripts() 是一个 WordPress 函数,用于注册与 @wordpress/scripts 集成的开发脚本,主要支持 React 刷新功能。该函数仅在特定开发环境下生效,并依赖于 SCRIPT_DEBUG 和 WP_Scripts 对象。

关键要点

  • 函数用于注册开发脚本,如 react-refresh-entry 和 react-refresh-runtime,以增强开发体验。
  • 仅在 SCRIPT_DEBUG 为 true、react 脚本已注册且未定义 WP_RUN_CORE_TESTS 时执行。
  • 通过 WP_Scripts 对象添加脚本,并设置依赖关系和版本。
  • 将 wp-react-refresh-entry 添加到 react 脚本的依赖中,以支持 React 刷新。

代码示例

function wp_register_development_scripts( $scripts ) {
    if (
        ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG
        || empty( $scripts->registered['react'] )
        || defined( 'WP_RUN_CORE_TESTS' )
    ) {
        return;
    }

    $development_scripts = array(
        'react-refresh-entry',
        'react-refresh-runtime',
    );

    foreach ( $development_scripts as $script_name ) {
        $assets = include ABSPATH . WPINC . '/assets/script-loader-' . $script_name . '.php';
        if ( ! is_array( $assets ) ) {
            return;
        }
        $scripts->add(
            'wp-' . $script_name,
            '/wp-includes/js/dist/development/' . $script_name . '.js',
            $assets['dependencies'],
            $assets['version']
        );
    }

    // See https://github.com/pmmmwh/react-refresh-webpack-plugin/blob/main/docs/TROUBLESHOOTING.md#externalising-react.
    $scripts->registered['react']->deps[] = 'wp-react-refresh-entry';
}

注意事项

  • 此函数在 WordPress 6.0.0 版本中引入,主要用于开发环境,生产环境通常不启用。
  • 需要确保 SCRIPT_DEBUG 常量已定义且为 true,否则函数将直接返回。
  • 依赖于 react 脚本已注册,否则不会执行脚本添加操作。
  • 相关资源文件位于 /wp-includes/assets/ 目录下,需确保文件存在。

📄 原文内容

Registers development scripts that integrate with @wordpress/scripts.

Description

See also

Parameters

$scriptsWP_Scriptsrequired
WP_Scripts object.

Source

function wp_register_development_scripts( $scripts ) {
	if (
		! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG
		|| empty( $scripts->registered['react'] )
		|| defined( 'WP_RUN_CORE_TESTS' )
	) {
		return;
	}

	$development_scripts = array(
		'react-refresh-entry',
		'react-refresh-runtime',
	);

	foreach ( $development_scripts as $script_name ) {
		$assets = include ABSPATH . WPINC . '/assets/script-loader-' . $script_name . '.php';
		if ( ! is_array( $assets ) ) {
			return;
		}
		$scripts->add(
			'wp-' . $script_name,
			'/wp-includes/js/dist/development/' . $script_name . '.js',
			$assets['dependencies'],
			$assets['version']
		);
	}

	// See https://github.com/pmmmwh/react-refresh-webpack-plugin/blob/main/docs/TROUBLESHOOTING.md#externalising-react.
	$scripts->registered['react']->deps[] = 'wp-react-refresh-entry';
}

Changelog

Version Description
6.0.0 Introduced.