首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PHP脚本安装Composer依赖程序

从PHP脚本安装Composer依赖程序
EN

Stack Overflow用户
提问于 2013-12-23 03:16:36
回答 2查看 665关注 0票数 3

我已经研究了一段时间,想出一种很好的方法来管理WordPress插件开发中的作曲家依赖性。在WordPress插件中包含依赖性是很容易的,但是如果两个单独的插件都有Composer.json/供应商目录,并且包含相同的包,那么就会发生冲突,所有的事情都会崩溃。因此,我的工作解决方案本质上是提供一个API,允许插件将它们的依赖推到一个中央包管理器中。

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

我一直试图用有限的运气来逆转工程师作曲家。变成了一团乱。我真的很好奇是否有人有在CLI之外使用Composer的经验,或者是否有可能,或者排除所有这些,如果有任何策略来复制功能,而不存在太大的问题。

我可以下载和安装一些东西,但是我不得不编写锁文件和自动加载程序,这两者都是整个过程中非常关键的部分。

tl/博士

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-02 05:40:00

Composer和CLI一样具有依赖性。Composer CLI是composer库的一个实现。

作曲家实现

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

代码语言:javascript
复制
Factory::create(IOInterface $io, $config = null, $disablePlugins = false);

composer install命令从引导安装程序开始

代码语言:javascript
复制
Installer::create(IOInterface $io, Composer $composer);

在这里,它设置了一些运行时变量,不管是声明的还是默认的,然后进入Installer::run()方法。

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

感兴趣领域

为了实现您的目标,您应该使用的大部分内容是为您的包实现一个repository。您可能需要查看ArrayRepository和安装的存储库的变体,以指导您的实现。一旦您有了一个存储库,就可以向composer介绍您的包。

代码语言:javascript
复制
Installer::setAdditionalInstalledRepository(RepositoryInterface $repo)

值得注意的项目

元数据浏览器

  • 帕卡吉斯特 -为它提供的所有功能广泛使用composer
  • 包装工 -类似于packagist,同时为存储库提供伪数据
  • 萨蒂 --使用composer生成类似于上述示例的包存储库

安装工

票数 1
EN

Stack Overflow用户

发布于 2013-12-28 01:36:14

首先,你有一个具体的问题,然后你应该解释这个问题,而不是你是如何得到的。

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

代码语言:javascript
复制
<?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。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20736520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档