我一直在努力寻找一种在WordPress插件开发中管理Composer依赖性的好方法。在WordPress插件中包含依赖项很容易,但如果两个单独的插件都有composer.json / vendor目录,并且包含相同的包,则会发生冲突,一切都崩溃了。因此,我的工作解决方案实际上是提供一个API,允许插件将其依赖项推送到中央软件包管理器。
此解决方案在手动管理和通过命令行安装时工作正常,但WordPress显然很受欢迎,因为进入门槛低。通过命令行安装Composer软件包是一个很大的障碍,所以我开始创建一个插件来列出并安装所有共享的依赖项。我完成了中途,代码在Github上,here。
我一直试图对Composer进行反向工程,运气有限。它变成了一团糟。我真的很好奇,如果有人有在CLI之外使用Composer的经验,或者如果有可能,或者除非所有这些,如果有任何策略可以使sorta复制功能而没有太大的问题。
我能够下载和安装东西,但我写了锁文件和自动加载器,这两者都是整个事情的关键部分。
TL / DR :
答案 0 :(得分:1)
与CLI一样,Composer与依赖项一样有效。 Composer CLI是作曲家库设计的一个实现。
应用程序本身通过factory class引导composer
。
Factory::create(IOInterface $io, $config = null, $disablePlugins = false);
composer install
命令首先提升installer
Installer::create(IOInterface $io, Composer $composer);
从那里设置一些运行时变量,无论是声明的还是默认的,都进入Installer::run()
方法。
有关如何安装的详细信息,请参阅InstallCommand
课程。
为实现目标,您应该使用的大部分内容是为您的软件包实施repository
。您可能需要查看ArrayRepository
以及已安装存储库的变体以指导您的实施。拥有存储库后,您可以告诉作曲家您的软件包。
Installer::setAdditionalInstalledRepository(RepositoryInterface $repo)
composer
提供的所有内容packagist
,同时为存储库提供伪数据composer
生成类似于上述示例的包存储库答案 1 :(得分:-2)
首先,你有一个特定的问题,那么你应该解释这个问题,而不是你如何到达那里。
我写了一个小脚本来测试自动加载器生成或锁定文件创建的问题。
<?php
include __DIR__ . '/vendor/autoload.php';
$factory = new \Composer\Factory();
//$io = new \Composer\IO\NullIO();
$io = new \Composer\IO\ConsoleIO(
new \Symfony\Component\Console\Input\ArgvInput(),
new \Symfony\Component\Console\Output\ConsoleOutput(),
new \Symfony\Component\Console\Helper\HelperSet()
);
$composer = $factory->createComposer( $io );
$install = \Composer\Installer::create($io, $composer);
$install
->setDryRun( false )
->setVerbose( false )
->setPreferSource( false )
->setPreferDist( true )
->setDevMode( false )
->setRunScripts( true )
->setOptimizeAutoloader( false )
;
$install->run();
我从带有composer.json的目录中的命令行运行它,它可以工作。
要从webserver(php internal one)运行它,我使用NUllIO,它没有问题。
如果您指定问题,我会更新答案。
如果您希望某人修改您自己的代码,您应该付钱给他们(或我) 但不好说:在这里,看看我的github存储库,请修复bug