codezero / composer-preload-files
Composer 插件,在供应商文件之前自动加载文件。
Requires
- php: >= 7.0
- composer-plugin-api: ^2.0
Requires (Dev)
- composer/composer: ^2.0
This package is auto-updated.
Last update: 2024-09-22 14:19:53 UTC
README
在供应商文件之前自动加载您的文件
此 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
将在标准 autoload
或 autoload-dev
部分的 files
之前加载。这对于您的项目来说是正确的,但对于任何供应商包也是如此。您项目的预加载文件将始终首先加载。
🔌 示例用例
最好的示例用例是在需要覆盖 Laravel 项目中的全局辅助函数时。这些辅助函数在 helper 文件中声明,这些文件在 composer.json
的 autoload
部分的 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';
这行得通,但很难测试(我还没有找到方法)。如果您正在开发一个包,这也是用户需要采取的额外步骤来安装它。
另一种解决方案是像这样的包。
☕ 致谢
- @ivanvermeyen
- @hopeseekr - 原始分支: hopeseekr-contribs/composer-include-files
- @funkjedi - 原始: funkjedi/composer-include-files
- 所有贡献者
🔒 安全性
如果您发现任何与安全性相关的问题,请通过电子邮件与我联系,而不是使用问题跟踪器。
📑 更新日志
有关此包的所有显著更改的完整列表可以在 发布页面 上找到。
📜 许可证
MIT 许可证 (MIT)。请参阅许可证文件以获取更多信息。