我已经研究了一段时间,想出一种很好的方法来管理WordPress插件开发中的作曲家依赖性。在WordPress插件中包含依赖性是很容易的,但是如果两个单独的插件都有Composer.json/供应商目录,并且包含相同的包,那么就会发生冲突,所有的事情都会崩溃。因此,我的工作解决方案本质上是提供一个API,允许插件将它们的依赖推到一个中央包管理器中。
这个解决方案在手动管理物料和通过命令行进行安装时运行良好,但由于进入门槛低,WordPress显然很受欢迎。通过命令行安装Composer包是进入的一个很高的障碍,所以我开始创建一个插件来列出并安装所有共享的依赖项。我已经完成了一半的工作,代码是在Github,这里上的。
我一直试图用有限的运气来逆转工程师作曲家。变成了一团乱。我真的很好奇是否有人有在CLI之外使用Composer的经验,或者是否有可能,或者排除所有这些,如果有任何策略来复制功能,而不存在太大的问题。
我可以下载和安装一些东西,但是我不得不编写锁文件和自动加载程序,这两者都是整个过程中非常关键的部分。
tl/博士
发布于 2014-01-02 05:40:00
Composer和CLI一样具有依赖性。Composer CLI是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)值得注意的项目
元数据浏览器
安装工
发布于 2013-12-28 01:36:14
首先,你有一个具体的问题,然后你应该解释这个问题,而不是你是如何得到的。
我编写了一个小脚本来测试自动加载程序生成或锁定文件创建的问题。
<?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内部服务器)运行它,我使用NUllIO,它的工作没有问题。
如果你指定问题,我会更新答案。
如果你想让别人修复你自己的代码,你应该付钱给他们(或者我),但是不能说:在这里,看看我的github存储库,请修复这个bug。
https://stackoverflow.com/questions/20736520
复制相似问题