codezero / composer-preload-files

Composer 插件,在供应商文件之前自动加载文件。

安装次数: 145,751

依赖者: 1

建议者: 0

安全性: 0

星标: 1

关注者: 3

分支: 0

开放问题: 0

类型:composer-plugin

1.0.2 2023-05-24 15:46 UTC

This package is auto-updated.

Last update: 2024-09-22 14:19:53 UTC


README

GitHub release License Total Downloads

在供应商文件之前自动加载您的文件

此 Composer 插件允许您在加载任何供应商文件之前,自动加载您指定的文件。

本包基于 funkjedi 的原始包 funkjedi/composer-include-files 和其分支 hopeseekr-contribs/composer-include-files,由 @funkjedi@hopeseekr 创建。由于这些包的维护似乎已停滞,我决定尝试从头开始重新制作这个包,并在过程中修复任何报告的缺陷。

✅ 要求

  • PHP >= 7.0
  • Composer ^2.3

📦 安装

使用 Composer 安装此包

composer require codezero/composer-preload-files

📘 使用方法

preload-files 添加到项目的 composer.json 文件中的 extra 部分

"extra": {
    "preload-files": [
        "app/helpers.php"
    ]
},

extra 部分的 preload-files 将在标准 autoloadautoload-dev 部分的 files 之前加载。这对于您的项目来说是正确的,但对于任何供应商包也是如此。您项目的预加载文件将始终首先加载。

🔌 示例用例

最好的示例用例是在需要覆盖 Laravel 项目中的全局辅助函数时。这些辅助函数在 helper 文件中声明,这些文件在 composer.jsonautoload 部分的 files 数组中加载。

"autoload": {
    "files": [
        "src/Illuminate/Collections/helpers.php",
        "src/Illuminate/Events/functions.php",
        "src/Illuminate/Foundation/helpers.php",
        "src/Illuminate/Support/helpers.php"
    ]
},

这些函数声明如下

// helpers.php
if ( ! function_exists('route')) {
    function route($name, $parameters = [], $absolute = true)
    {
        return app('url')->route($name, $parameters, $absolute);
    }
}

如果您在项目的 autoload 部分添加自己的辅助文件来覆盖此类函数,您会发现 Laravel 的函数已经加载,您无法重新声明它。

解决此问题的一种方法是在 Composer 的 autoload.php 文件之前手动 require 辅助文件。对于 Laravel,这意味着您需要在项目的 public/index.php 文件中 require 该文件。

require __DIR__.'/../app/helpers.php';
require __DIR__.'/../vendor/autoload.php';

这行得通,但很难测试(我还没有找到方法)。如果您正在开发一个包,这也是用户需要采取的额外步骤来安装它。

另一种解决方案是像这样的包。

☕ 致谢

🔒 安全性

如果您发现任何与安全性相关的问题,请通过电子邮件与我联系,而不是使用问题跟踪器。

📑 更新日志

有关此包的所有显著更改的完整列表可以在 发布页面 上找到。

📜 许可证

MIT 许可证 (MIT)。请参阅许可证文件以获取更多信息。