Make WordPress Core


Ignore:
Timestamp:
05/19/2026 12:23:04 PM (4 months ago)
Author:
ellatrix
Message:

Script Loader: Warn when classic scripts with module dependencies lack footer/defer.

A classic script with module_dependencies may be evaluated before the script modules import map is printed if it loads blocking in the document head, causing a "Failed to resolve module specifier" error on dynamic imports.

  • Trigger _doing_it_wrong() from _wp_scripts_add_args_data() when a classic script provides module_dependencies without setting in_footer to true or using a defer loading strategy, and document this requirement in the wp_register_script() and wp_enqueue_script() docblocks.
  • Remove the module_dependencies arg from the wp-codemirror script registration in favor of passing the espree module URL directly through wp_get_code_editor_settings(). This avoids registering espree as a publicly-available script module when it is only ever used internally as a private implementation detail of the code editor.
  • Add a console.warn() in wp.codeEditor.initialize() when invoked before DOMContentLoaded, so developers are alerted if the function is called too early for the import map to have been parsed.
  • Add PHPStan types which were missing when module_dependencies were initially introduced.
  • Harden WP_Scripts::add_data() against non-string strategy values being passed to sprintf().

Developed in https://github.com/WordPress/wordpress-develop/pull/11788

Follow-up to r61587.

Reviewed by jonsurrell.
Merges [62368] to the 7.0 branch.
Props khokansardar, westonruter, jonsurrell, jorbin.
See #61500, #64238.
Fixes #65165.

Location:
branches/7.0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/7.0

  • branches/7.0/src/wp-includes/class-wp-scripts.php

    r61927 r62379  
    886886                                                /* translators: 1: $strategy, 2: $handle */
    887887                                                __( 'Invalid strategy `%1$s` defined for `%2$s` during script registration.' ),
    888                                                 $value,
     888                                                is_string( $value ) ? $value : gettype( $value ),
    889889                                                $handle
    890890                                        ),
     
    898898                                                /* translators: 1: $strategy, 2: $handle */
    899899                                                __( 'Cannot supply a strategy `%1$s` for script `%2$s` because it is an alias (it lacks a `src` value).' ),
    900                                                 $value,
     900                                                is_string( $value ) ? $value : gettype( $value ),
    901901                                                $handle
    902902                                        ),
Note: See TracChangeset for help on using the changeset viewer.