Skip to content

Conversation

@deepakpra
Copy link

This PR adds developer-facing _doing_it_wrong() notices when a script or script module is enqueued with dependencies that have not been registered.

Currently, WordPress silently skips printing such assets, which makes dependency issues difficult to diagnose. This change improves debugging clarity during development.

What’s changed
✅ Classic scripts (WP_Scripts)

  • Detects missing dependencies in all_deps().
  • Emits a _doing_it_wrong() notice identifying the script handle and missing dependency handles.

✅ Script modules (WP_Script_Modules)

  • Detects missing dependencies during dependency sorting.
  • Emits a _doing_it_wrong() notice with the module ID and missing dependency IDs.

Both implementations:

  • Prevent duplicate notices using a static cache.

Trac ticket: https://core.trac.wordpress.org/ticket/64229

image

@github-actions
Copy link

github-actions bot commented Nov 24, 2025

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props deepakprajapati, westonruter.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@github-actions
Copy link

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • The Plugin and Theme Directories cannot be accessed within Playground.
  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

@deepakpra deepakpra marked this pull request as draft November 24, 2025 12:24
@westonruter westonruter self-requested a review November 25, 2025 00:32
@westonruter
Copy link
Member

Let's make sure to add unit tests for these changes as well.

@deepakpra deepakpra marked this pull request as ready for review November 25, 2025 11:11
@westonruter
Copy link
Member

This is looking good to me. I will plan to finish reviewing and commit by next week.

@westonruter
Copy link
Member

I'm testing this with the following plugin code:

add_action(
	'wp_enqueue_scripts',
	static function () {
		wp_enqueue_script( 'bad-script', '/bad.js', array( 'nope' ) );
		wp_enqueue_style( 'bad-style', '/bad.css', array( 'nope' ) );
		wp_enqueue_script_module( 'bad-module', '/bad.mjs', array( 'nope' ) );
	}
);

I get the following log entries:

  • PHP Notice: Function WP_Dependencies::all_deps was called incorrectly. The style with the handle bad-style was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  • PHP Notice: Function WP_Dependencies::all_deps was called incorrectly. The script with the handle bad-script was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  • PHP Notice: Function WP_Script_Modules::sort_item_dependencies was called incorrectly. The script module bad-module was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  • PHP Notice: Function WP_Script_Modules::sort_item_dependencies was called incorrectly. The script module bad-module was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  • PHP Notice: Function WP_Script_Modules::sort_item_dependencies was called incorrectly. The script module bad-module was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  • PHP Notice: Function WP_Dependencies::all_deps was called incorrectly. The style with the handle bad-style was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  • PHP Notice: Function WP_Dependencies::all_deps was called incorrectly. The script with the handle bad-script was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131

The duplication of the notices is indeed not great. I think what I'll do is just add a private member variable to the classes to keep track of what has been flagged with _doing_it_wrong(). This will solve the problem of a static variable not being reset with tests.

What's also confusing is the functions being flagged are unrelated to the functions which may have been called incorrectly by the user. So I think I'll update these to use the WP_Scripts::add(), WP_Styles::add(), and WP_Script_Modules::register() methods which are actually flagged as being called incorrectly. This will make much more sense to a developer.

Also, I'll add quotes around the initial handle ID.

@westonruter
Copy link
Member

There, I think it is more developer-friendly now. When registering a script, style, and script module with missing dependencies, I now get just three notices:

  1. Notice: Function WP_Styles::add was called incorrectly. The style with the handle "bad-style" was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  2. Notice: Function WP_Scripts::add was called incorrectly. The script with the handle "bad-script" was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131
  3. Notice: Function WP_Script_Modules::register was called incorrectly. The script module "bad-module" was enqueued with dependencies that are not registered: nope. Please see Debugging in WordPress for more information. (This message was added in version 7.0.0.) in /var/www/src/wp-includes/functions.php on line 6131

global $wp_version;
$wp_version = '99.9.9';

$this->setExpectedIncorrectUsage( 'WP_Script_Modules::sort_item_dependencies' );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method shouldn't have emitted an incorrect notice to begin with. I see it was due to a typo in this line:

Note the extra space after c.

This was introduced in r60999. I've fixed this in a553244.

@westonruter westonruter changed the title Add _doing_it_wrong() notices for missing script and script module dependencies Add _doing_it_wrong() notices for missing script, style, and script module dependencies Nov 30, 2025
@westonruter
Copy link
Member

Notices as displayed in Query Monitor:

image

This is in addition to Query Monitor's built-in warnings for scripts and styles (but it doesn't currently warn for missing script module dependencies):

Screenshot 2025-11-29 at 16 50 29 Screenshot 2025-11-29 at 16 50 14

pento pushed a commit that referenced this pull request Nov 30, 2025
…t module with missing dependencies.

Developed in #10545

Follow-up to [60999].

Props deepakprajapati, westonruter.
See #63486.
Fixes #64229.


git-svn-id: https://develop.svn.wordpress.org/trunk@61323 602fd350-edb4-49c9-b593-d223f7449a82
@github-actions
Copy link

A commit was made that fixes the Trac ticket referenced in the description of this pull request.

SVN changeset: 61323
GitHub commit: 3901a29

This PR will be closed, but please confirm the accuracy of this and reopen if there is more work to be done.

@github-actions github-actions bot closed this Nov 30, 2025
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Nov 30, 2025
…t module with missing dependencies.

Developed in WordPress/wordpress-develop#10545

Follow-up to [60999].

Props deepakprajapati, westonruter.
See #63486.
Fixes #64229.

Built from https://develop.svn.wordpress.org/trunk@61323


git-svn-id: http://core.svn.wordpress.org/trunk@60635 1a063a9b-81f0-0310-95a4-ce76da25c4cd
github-actions bot pushed a commit to platformsh/wordpress-performance that referenced this pull request Nov 30, 2025
…t module with missing dependencies.

Developed in WordPress/wordpress-develop#10545

Follow-up to [60999].

Props deepakprajapati, westonruter.
See #63486.
Fixes #64229.

Built from https://develop.svn.wordpress.org/trunk@61323


git-svn-id: https://core.svn.wordpress.org/trunk@60635 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants