从PHP脚本安装Composer Dependencies



我已经花了一段时间研究如何在WordPress插件开发中管理Composer依赖关系。在WordPress插件中包含依赖关系很容易,但如果两个单独的插件都有composer.json/vvendor目录,并且包含同一个包,则会发生冲突,一切都会崩溃。因此,我的工作解决方案本质上是提供一个API,允许插件将其依赖关系推送到中央包管理器中。

这个解决方案在手动管理和通过命令行安装时运行良好,但WordPress显然很受欢迎,因为它的入门门槛很低。通过命令行安装Composer包是一个很高的入门门槛,所以我开始创建一个插件来列出和安装所有共享依赖项。我已经完成了一半,代码在Github上,在这里。

我一直在尝试对Composer进行逆向工程,但运气很差。它变得一团糟。我真的很好奇是否有人有在CLI之外使用Composer的经验,或者是否有可能,或者除此之外,是否有任何策略可以在没有太大问题的情况下对复制功能进行排序。

我可以下载并安装一些东西,但我在编写锁定文件和自动加载器时遇到了麻烦,这两个部分都是整个过程中非常关键的部分。

tl/dr

  • Composer被编写为打包并通过CLI运行
  • 我想在WordPress插件中使用或模仿它的功能
  • 有可能吗
  • 有人这样做过吗?是否有我可以查看的现有项目
  • 我特别关心Autoloader和Lock文件的创建,但我对安装程序的实现也不满意

Composer作为依赖项的工作效果与CLI一样好。Composer CLI是Composer库的一个实现

Composer实现

应用程序本身通过工厂类引导composer

Factory::create(IOInterface $io, $config = null, $disablePlugins = false);

composer install命令从提升安装程序开始

Installer::create(IOInterface $io, Composer $composer);

从那里,它设置了一些运行时变量,无论是声明的还是默认的,并进入Installer::run()方法。

有关如何进行安装的更多详细信息,请参阅InstallCommand类。

感兴趣的领域

为了实现您的目标,您应该进行的大部分工作是为您的包实现repository。您可能希望了解ArrayRepository和已安装存储库的变体,以指导您的实现。一旦您有了一个存储库,您就可以告诉composer您的包。

Installer::setAdditionalInstalledRepository(RepositoryInterface $repo)

值得注意的项目

元数据浏览器

  • Packagist-广泛使用composer
  • Wpackagist-类似于packagist,同时为存储库提供伪数据
  • Satis-使用composer生成类似于上述示例的包存储库

安装程序

  • 嵌入式composer-将外部依赖项与应用程序依赖项合并

首先,你有一个特定的问题,然后你应该解释这个问题,而不是你是如何到达那里的。

我写了一个小脚本来测试自动加载程序生成或锁定文件创建的问题。

<?php
include __DIR__ . '/vendor/autoload.php';
$factory = new ComposerFactory();
//$io =  new ComposerIONullIO();
$io =  new ComposerIOConsoleIO( 
new SymfonyComponentConsoleInputArgvInput(),
new SymfonyComponentConsoleOutputConsoleOutput(),
new SymfonyComponentConsoleHelperHelperSet()
);
$composer = $factory->createComposer( $io );
$install = ComposerInstaller::create($io, $composer);
$install
->setDryRun( false )
->setVerbose( false )
->setPreferSource( false )
->setPreferDist( true )
->setDevMode( false )
->setRunScripts( true )
->setOptimizeAutoloader( false )
;
$install->run();

我用composer.json在目录中的命令行中运行它,它就可以工作了。

要从Web服务器(php内部服务器)运行它,我使用NUllIO,它工作起来没有问题。

如果你指定问题,我会更新答案。

如果你想让别人修复你自己的代码,你应该付钱给他们(或我)但不可以说:在这里,看看我的github存储库,请修复错误

相关内容

  • 没有找到相关文章

最新更新