typisttech / imposter
将所有 composer 供应商包包装在您的命名空间内。适用于 WordPress 插件。
Requires
- php: ^7.3 || ^8.0
- ext-json: *
Requires (Dev)
Suggests
- typisttech/imposter-plugin: Composer plugin to integrate composer and imposter
This package is auto-updated.
Last update: 2024-09-20 00:07:04 UTC
README
Imposter
将所有 composer 供应商包包装在您的命名空间内。适用于 WordPress 插件。
由 Typist Tech 倾心打造
Imposter 是一个开源项目,并且完全免费使用。
然而,没有适当的财务支持,维持和发展新功能所需的工作量是不可持续的。如果您有能力,请考虑通过以下链接进行捐赠
将所有 composer 供应商包包装在您的命名空间内。适用于 WordPress 插件。
为什么?
由于 WordPress 中缺乏依赖管理,如果两个插件捆绑了同一包的冲突版本,就会产生难以重现的错误。对 composer 供应商包进行猴子补丁,将它们包装在您的命名空间内,是避免此类冲突的次优解决方案。
见
安装
如果您想将 Imposter 集成到 composer 命令事件 中,请安装 Imposter 插件。见:如何将 Imposter 集成到 composer 中?
应通过 composer 进行安装,有关如何安装 composer 的详细信息,请参阅 https://getcomposer.org.cn/。
composer require typisttech/imposter
配置
在您的 composer.json
"extra": { "imposter": { "namespace": "My\\App\\Vendor", "excludes": [ "dummy/dummy-excluded" ] } }
extra.imposter.namespace
必需 字符串
这是要添加到供应商包的命名空间前缀。
extra.imposter.excludes
可选 字符串数组
需要排除从命名空间前缀中的供应商包。默认情况下,所有 由 composer 创建的包 都被排除。此外,所有在 Composer
命名空间下的内容也将被排除。
用法
每次 $ composer install
和 $ composer update
<?php use TypistTech\Imposter\ImposterFactory; $imposter = ImposterFactory::forProject('/path/to/project/root'); $imposter->run();
上述代码片段
- 查找
/path/to/project/root/composer.json
- 查找 vendor-dir
- 找出所有 必需的包,包括依赖项所需的包
- 找出所有必需包的所有 自动加载路径
- 使用在您的
composer.json
中定义的 imposter 命名空间前缀对所有命名空间进行前缀
之前
<?php namespace Dummy\File; use AnotherDummy\{ SubAnotherDummy, SubOtherDummy }; use Composer; use Composer\Plugin\PluginInterface; use Dummy\SubOtherDummy; use OtherDummy\SubOtherDummy; use RuntimeException; use \UnexpectedValueException; use function OtherVendor\myFunc; use const OtherVendor\MY_MAGIC_NUMBER; $closure = function () use ($aaa) { // Just testing. }; class DummyClass { public function useClosure() { array_map(function () use ($xxx) { // Just testing. }, []); } } function dummyFunction(string $namespace = null, string $use = null): array { if (! is_null($namespace) && $namespace === 'dummy string' && $use === 'dummy string') { // Just testing. } return []; } foreach ([] as $namespace => $prefix) { $aaaa = '{' . $namespace . '}' . $prefix; } /** Just a comment for testing $namespace transformation */
之后
<?php namespace MyPlugin\Vendor\Dummy\File; use MyPlugin\Vendor\AnotherDummy\{ SubAnotherDummy, SubOtherDummy }; use Composer; use Composer\Plugin\PluginInterface; use MyPlugin\Vendor\Dummy\SubOtherDummy; use MyPlugin\Vendor\OtherDummy\SubOtherDummy; use RuntimeException; use \UnexpectedValueException; use function MyPlugin\Vendor\OtherVendor\myFunc; use const MyPlugin\Vendor\OtherVendor\MY_MAGIC_NUMBER; $closure = function () use ($aaa) { // Just testing. }; class DummyClass { public function useClosure() { array_map(function () use ($xxx) { // Just testing. }, []); } } function dummyFunction(string $namespace = null, string $use = null): array { if (! is_null($namespace) && $namespace === 'dummy string' && $use === 'dummy string') { // Just testing. } return []; } foreach ([] as $namespace => $prefix) { $aaaa = '{' . $namespace . '}' . $prefix; } /** Just a comment for testing $namespace transformation */
Typist Tech 准备构建您下一个令人惊叹的 WordPress 网站。 雇佣我们!
已知问题
需要帮助。 欢迎提交拉取请求。
- 特性未转换
- 不支持虚拟包
常见问题解答
如何将 imposter 集成到 composer 中?
使用 Imposter 插件。它将 imposter 集成到 composer 命令事件 中。
imposter 是否支持 PSR4
,PSR0
,Classmap
和 Files
?
是的,所有都支持。PSR-4 和 PSR-0 自动加载,类映射生成和文件包含都受到支持。
我是否可以排除一些包以供 imposter 使用?
是的,请参见 extra.imposter.excludes
。默认情况下,所有由 composer 创建的包都被排除。
那么 require-dev
包怎么办呢?
Imposter 在 require-dev
包上不做任何操作,因为 imposter 的目的是避免生产环境,而不是开发环境。
PHP 内置类怎么办?
Imposter 会跳过全局命名空间中的类,例如:\ArrayObject
、\RuntimeException
那么不使用命名空间的包怎么办?
目前还不支持。请通过 创建一个 issue 告诉我您的想法。
使用完全限定名的包怎么办?
目前还不支持。我们需要在 Transformer 类中有一个更好的正则表达式(或比正则表达式更好的东西)。请通过 创建一个 issue 告诉我您的想法。
整个 imposter 的情况很糟糕。我们能做什么呢?
在 WordPress 核心提供关于依赖管理的解决方案之前,请保持冷静并继续前进。
与此同时,请查看这些工具 以使 WordPress 更好 现代化 WordPress 开发
支持哪些 composer 版本?
支持 v1 和 v2。
您会添加对旧 PHP 版本的支持吗?
永远不会!此插件仅适用于 积极支持的 PHP 版本。
不要在 已停产 或仅提供 安全修复 的 PHP 版本上使用它。
看起来很棒。我能在哪里找到更多这样的好东西?
- 在 Typist Tech 的博客 上的文章
- wp.org 上的 Tang Rufus 的 WordPress 插件
- 在 Typist Tech 的 GitHub 个人资料 上有更多项目
- 关注 Typist Tech 的通讯
- 关注 Tang Rufus 的 Twitter 账户
- 雇佣 Tang Rufus 来构建您下一个令人惊叹的网站
我可以在哪里给出 5 星级的评论?
谢谢!很高兴你喜欢它。让我知道有人在使用这个项目是很重要的。请考虑
- 推文 一下,并提及 @TangRufus
- ★ 星 GitHub 仓库
- 👀 观察 GitHub 仓库
- 编写教程和博客文章
- 雇佣 Typist Tech
测试
composer test
composer style:check
替代方案
以下是我找到的替代方案列表。然而,这些方案都不满足我的要求。
如果您知道其他类似的项目,请随时编辑本节!
-
Mozart by Coen Jacobs
- 支持 PSR0 和 PSR4
- 依赖包存储在不同的目录中
-
- 为文件/目录中的所有 PHP 命名空间添加前缀,以隔离打包在 PHAR 中的代码
反馈
请提供反馈! 我们希望使这个项目尽可能有用。请提交问题并指出您喜欢和不喜欢的功能,或者克隆项目并发送拉取请求。 没有问题太小。
安全漏洞
如果您在此项目中发现安全漏洞,请通过电子邮件发送给我们 imposter@typist.tech。所有安全漏洞都将得到及时处理。
鸣谢
Imposter 是一个 Typist Tech 项目,由 Tang Rufus 维护,他是 招聘 的自由职业开发者。
完整的贡献者列表可以在这里找到。