You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This plugin will currently throw a hard error when we try to load the page if we try to enqueue an asset from a manifest that doesn't exist. We should adjust this behavior so that it logs a warning, but does not actually stop loading the page, because having it completely error prevents quick bisecting between branches that need builds (among other things).
The error we see sometimes:
Fatal error: Uncaught Error: Asset_Loader\enqueue_asset(): Argument #1 ($manifest_path) must be of type string, null given, called in /wp/wp-content/themes/themename/functions.php on line 139
in /wp/wp-content/plugins/asset-loader/inc/namespace.php on line 170
This is a consequence of themes using this pattern:
/** * Check through the available manifests to find the first which includes the * target asset. This allows some assets to be loaded from a running DevServer * while others load from production files on disk. * * @param string $target_asset Desired asset within the manifest. * @return string|null */functionmyproject_custom_get_manifest_path( $target_asset ) {
$manifests = [
get_template_directory() . '/assets/dist/development-asset-manifest.json',
get_template_directory() . '/assets/dist/production-asset-manifest.json',
];
foreach ( $manifestsas$manifest_path ) {
$asset_uri = \Asset_Loader\Manifest\get_manifest_resource( $manifest_path, $target_asset );
if ( ! empty( $asset_uri ) ) {
return$manifest_path;
}
}
}
functionmytheme_enqueue_scripts() {
Asset_Loader\enqueue_asset(
myproject_custom_get_manifest_path( 'my-script-bundle.js' ),
'my-script-bundle.js',
[
'dependencies' => [],
'handle' => 'my-script-bundle',
]
);
}
This code should be improved -- The function which looks up a resource in a series of manifests should not return null if no matching asset is found. But that theme code quality concern still shouldn't cause a hard error because of this plugin.
Proposed change
Within Asset Loader, we should alter the enqueue_asset and register_asset functions to allow them to receive a ?string instead of a string, and add an if ( empty( $manifest_path ) ) { at the start of register_asset so that it will detect missing manifests before we try to register the asset. If the manifest is missing, we should log an informational error to the logs, and return an empty array from register_asset(). (Returning an empty array from that method will cause enqueue_asset to take no further action.)
Steps to reproduce
In a vip dev-env environment that is using a theme using this library, (contact me for an example, if HM-internal),
ensure the built files are not yet present (e.g. delete build directory or check out non-release branch)
try to load a page on the site
observe that the error shown above is thrown after no manifest can be found
The text was updated successfully, but these errors were encountered:
This plugin will currently throw a hard error when we try to load the page if we try to enqueue an asset from a manifest that doesn't exist. We should adjust this behavior so that it logs a warning, but does not actually stop loading the page, because having it completely error prevents quick bisecting between branches that need builds (among other things).
The error we see sometimes:
This is a consequence of themes using this pattern:
This code should be improved -- The function which looks up a resource in a series of manifests should not return
null
if no matching asset is found. But that theme code quality concern still shouldn't cause a hard error because of this plugin.Proposed change
Within Asset Loader, we should alter the
enqueue_asset
andregister_asset
functions to allow them to receive a?string
instead of astring
, and add anif ( empty( $manifest_path ) ) {
at the start ofregister_asset
so that it will detect missing manifests before we try to register the asset. If the manifest is missing, we should log an informational error to the logs, and return an empty array fromregister_asset()
. (Returning an empty array from that method will causeenqueue_asset
to take no further action.)Steps to reproduce
vip dev-env
environment that is using a theme using this library, (contact me for an example, if HM-internal),release
branch)The text was updated successfully, but these errors were encountered: