automattic/jetpack-autoloader

为插件或主题创建自定义自动加载器。

安装量: 3,483,821

依赖关系: 53

建议者: 88

安全: 0

星标: 39

关注者: 7

分支: 8

类型:composer-plugin

v3.1.0 2024-09-06 15:32 UTC

README

这是一个使用类映射始终加载最新版本类的自定义自动加载器生成器。

此自动加载器试图解决的问题是在两个或多个插件使用相同的包时出现的冲突,但其中一个插件使用了该包的较旧版本。

通过保持所有可以加载的不同类的内存映射,并在实例化类时更新映射以包含包最新版本的路径来解决这个问题,以便自动加载器可以找到。

它与默认Composer自动加载器设置的差异如下

  • 它在vendor/composer目录中创建jetpack_autoload_classmap.phpjetpack_autoload_filemap.php文件。
  • 此文件包含每个使用的包的版本号。
  • 无论哪个插件加载了包,自动加载器都将加载包的最新版本。只有当使用该包的每个插件都使用此自动加载器时,此行为才能保证。如果任何需要包的插件使用不同的自动加载器,则此自动加载器可能无法控制加载哪个版本的包。

使用方法

在您项目的composer.json中添加以下行

{
    "require": {
        "automattic/jetpack-autoloader": "^2"
    }
}

您的项目必须使用默认的Composer供应商目录vendor

在下次更新/安装后,您将有一个vendor/autoload_packages.php文件。通过主插件文件加载该文件。

在主插件中,您还需要按如下方式包含文件。

require_once  plugin_dir_path( __FILE__ ) . '/vendor/autoload_packages.php';

处理包的开发版本

自动加载器将尝试使用具有最新语义版本的包。

在开发过程中,您可以通过将JETPACK_AUTOLOAD_DEV常量设置为true来强制自动加载器使用开发包版本。当JETPACK_AUTOLOAD_DEV为true时,自动加载器将优先使用以下版本而不是语义版本

  • 9999999-dev
  • 具有dev-前缀的版本。

调试

一个常见的混淆错误原因是,在'plugins_loaded'钩子之前加载插件时自动加载类。如果该插件有该类的较旧版本,那么在提供较新版本类的插件有机会注册之前,可能已加载较旧版本。更令人困惑的是,这种情况可能是间歇性的,仅当自动加载器的插件缓存被无效化时才会出现。要调试此情况,您可以设置JETPACK_AUTOLOAD_DEBUG_EARLY_LOADS常量为true。

另一个常见的混淆错误原因是,当插件以其高于Jetpack自动加载器的优先级注册自己的自动加载器时,该自动加载器将加载应由Jetpack自动加载器处理的包。将JETPACK_AUTOLOAD_DEBUG_CONFLICTING_LOADERS常量设置为true将检查具有此类冲突的标准Composer自动加载器。

自动加载标准

所有新的Jetpack包开发都应使用类映射自动加载,这允许类和文件名符合WordPress编码标准。

优化自动加载器

在以下情况下生成优化后的自动加载器

  • 使用-o--optimize-autoloader调用composer installcomposer update
  • 使用-o--optimize调用composer dump-autoload

PSR-4 和 PSR-0 命名空间被转换为类映射。

未优化的自动加载器

支持 PSR-4 自动加载。PSR-0 命名空间被转换为类映射。

自动加载器限制

插件更新

在移动包类文件、重命名包类文件或更改包类命名空间时,请确保在插件更新后类不会被加载。

自动加载器在自动加载器加载时立即构建内存中的类映射。映射中的包类文件路径在插件更新后不会更新。如果在插件更新期间移动了一个插件包类文件,并且在更新后自动加载了这个移动的文件,将会出现错误。