Make WordPress Core

Changeset 61323

Timestamp:
11/30/2025 12:54:26 AM (3 months ago)
Author:
westonruter
Message:

Script Loader: Emit notices when enqueueing a script, style, or script module with missing dependencies.

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

Follow-up to [60999].

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

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-dependencies.php

    r61299 r61323  
    104104     */
    105105    private $queued_before_register = array();
     106
     107
     108
     109
     110
     111
     112
     113
     114
     115
     116
     117
    106118
    107119    /**
     
    200212            }
    201213
    202             $keep_going = true;
     214            $keep_going           = true;
     215            $missing_dependencies = array();
     216            if ( isset( $this->registered[ $handle ] ) && count( $this->registered[ $handle ]->deps ) > 0 ) {
     217                $missing_dependencies = array_diff( $this->registered[ $handle ]->deps, array_keys( $this->registered ) );
     218            }
    203219            if ( ! isset( $this->registered[ $handle ] ) ) {
    204220                $keep_going = false; // Item doesn't exist.
    205             } elseif ( $this->registered[ $handle ]->deps && array_diff( $this->registered[ $handle ]->deps, array_keys( $this->registered ) ) ) {
     221            } elseif ( count( $missing_dependencies ) > 0 ) {
     222                if ( ! in_array( $handle, $this->dependencies_with_missing_dependencies, true ) ) {
     223                    _doing_it_wrong(
     224                        get_class( $this ) . '::add',
     225                        $this->get_dependency_warning_message( $handle, $missing_dependencies ),
     226                        '7.0.0'
     227                    );
     228                    $this->dependencies_with_missing_dependencies[] = $handle;
     229                }
    206230                $keep_going = false; // Item requires dependencies that don't exist.
    207231            } elseif ( $this->registered[ $handle ]->deps && ! $this->all_deps( $this->registered[ $handle ]->deps, true, $new_group ) ) {
     
    536560        return 'W/"' . md5( $etag ) . '"';
    537561    }
     562
     563
     564
     565
     566
     567
     568
     569
     570
     571
     572
     573
     574
     575
     576
     577
     578
     579
    538580}
  • trunk/src/wp-includes/class-wp-script-modules.php

    r61073 r61323  
    7070        'high',
    7171    );
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
    7283
    7384    /**
     
    723734
    724735        // If the item requires dependencies that do not exist, fail.
    725         if ( count( array_diff( $dependency_ids, array_keys( $this->registered ) ) ) > 0 ) {
     736        $missing_dependencies = array_diff( $dependency_ids, array_keys( $this->registered ) );
     737        if ( count( $missing_dependencies ) > 0 ) {
     738            if ( ! in_array( $id, $this->modules_with_missing_dependencies, true ) ) {
     739                _doing_it_wrong(
     740                    get_class( $this ) . '::register',
     741                    sprintf(
     742                        /* translators: 1: Script module ID, 2: Comma-separated list of missing dependency IDs. */
     743                        __( 'The script module with the ID "%1$s" was enqueued with dependencies that are not registered: %2$s.' ),
     744                        $id,
     745                        implode( ', ', $missing_dependencies )
     746                    ),
     747                    '7.0.0'
     748                );
     749                $this->modules_with_missing_dependencies[] = $id;
     750            }
     751
    726752            return false;
    727753        }
  • trunk/src/wp-includes/class-wp-scripts.php

    r61223 r61323  
    11651165        $this->ext_handles    = '';
    11661166    }
     1167
     1168
     1169
     1170
     1171
     1172
     1173
     1174
     1175
     1176
     1177
     1178
     1179
     1180
     1181
     1182
     1183
     1184
    11671185}
  • trunk/src/wp-includes/class-wp-styles.php

    r61084 r61323  
    494494        $this->print_html     = '';
    495495    }
     496
     497
     498
     499
     500
     501
     502
     503
     504
     505
     506
     507
     508
     509
     510
     511
     512
     513
    496514}
  • trunk/tests/phpunit/tests/dependencies/scripts.php

    r61223 r61323  
    40944094        $this->assertStringNotContainsStringIgnoringCase( 'sourceURL=', $translations_script_data );
    40954095    }
     4096
     4097
     4098
     4099
     4100
     4101
     4102
     4103
     4104
     4105
     4106
     4107
     4108
     4109
     4110
     4111
     4112
     4113
     4114
     4115
     4116
     4117
     4118
     4119
     4120
     4121
     4122
     4123
     4124
    40964125}
  • trunk/tests/phpunit/tests/dependencies/styles.php

    r61084 r61323  
    815815        $this->assertEqualHTML( $expected, $printed );
    816816    }
     817
     818
     819
     820
     821
     822
     823
     824
     825
     826
     827
     828
     829
     830
     831
     832
     833
     834
     835
     836
     837
     838
     839
     840
     841
     842
     843
     844
     845
     846
     847
     848
    817849}
  • trunk/tests/phpunit/tests/script-modules/wpScriptModules.php

    r61073 r61323  
    20602060        );
    20612061
    2062         $deregister( array( 'b', 'c ' ) );
     2062        $deregister( array( 'b', 'c' ) );
    20632063
    20642064        // Test that registered dependency in footer doesn't place dependant in footer.
     
    23132313        );
    23142314    }
     2315
     2316
     2317
     2318
     2319
     2320
     2321
     2322
     2323
     2324
     2325
     2326
     2327
     2328
     2329
     2330
     2331
     2332
     2333
     2334
     2335
     2336
     2337
     2338
     2339
     2340
     2341
     2342
    23152343}
Note: See TracChangeset for help on using the changeset viewer.