【问题标题】:How to install vendor bundle WITHOUT composer (corporate network)如何在没有作曲家的情况下安装供应商捆绑包(企业网络)
【发布时间】:2016-04-26 00:12:51
【问题描述】:

首先,我不能使用composer,因为我在公司网络下。我尽一切努力让作曲家工作:

  • HTTP_PROXY、HTTPS_PROXY、HTTPS_FULLURI ... 没有任何效果。 Composer diag 为 http packagist 提供了 OK 状态,但为 https 连接提供了失败。它给我的错误是:

SSL : 握手超时。

但这不是我的问题,我花了很多时间试图让作曲家工作(但如果你有解决方案,你会让我开心的)

我真正的问题是:如何手动安装捆绑包

我想安装这个包:http://knpbundles.com/pierredup/MenuBundle

我做了什么来尝试安装捆绑包:

  • 在 appKernel.php 中注册包:

new \CS\MenuBundle\CSMenuBundle()

  • 尝试将其添加到 autoload.php 中:

$loader->add('CS', __ DIR __.'/../vendor/CS/CSMenuBundle.php');

(不知道如何正确添加php代码...)

但它不起作用,出现以下错误:

尝试从命名空间“CS\MenuBundle”加载类“CSMenuBundle”。 您是否忘记了另一个命名空间的“使用”语句?

然后,即使这不是一个好习惯,我也尝试将其添加到 autoload_namespaces.php 并在此之后进行了转储自动加载:

'CS\MenuBundle' => 数组($vendorDir.'/CS/')

我仍然有一个错误,但不完全相同:

尝试从命名空间“CS\MenuBundle”加载类“CSMenuBundle”。 您是否忘记了“CS\MenuBundle\CSMenuBundle”的“使用”语句?

现在我有点沮丧,我看到很多帖子(不是在 Stack 上)人们尖叫,因为我们必须使用 composer 来管理依赖项。我完全同意这一点,但我不能,所以我试图找到另一种方法,因为我找不到任何明确的教程来解释如何在没有 composer 的情况下安装供应商,所以我来了。

【问题讨论】:

  • 您是否下载了捆绑包的源代码并将其放在所需的文件夹中?也许您最好在本地使用 Composer 安装依赖项,然后将 vendor 目录与生产系统同步。
  • 我认为你问错了问题。虽然通常可以将所有需要的包及其依赖项下载到正确的版本中,将它们放入一个文件夹,然后添加一些自动加载功能,但这是一项繁琐的任务,实际上需要自动化。问题是:如果 Composer 无法使用 HTTPS,那么您的自动化脚本也无法使用。您最终无法不断更新您的依赖关系,并且会避免这样做。正确的解决方案是找到正确使用 Composer 的方法。问问你的同事和老板如何到达那里。别无选择。
  • 我必须说您的评论和下面给出的答案很棒。我成功安装了包,我只需要创建文件夹 MenuBundle,然后 autoload_namespaces 运行良好。我为 Evehiy 在 gitHUB 上提供的 symfony 的 MaterializeBundle 做了同样的事情。我完全知道没有作曲家的工作是行不通的......我想对于这种捆绑(我的意思是像物化这样的前端捆绑)这并不是一个大问题。但正如你所说,对于 CS 或任何其他捆绑包,我会一次又一次地撞到墙上……顺便说一句,这不是我的错。感谢您的宝贵时间

标签: symfony composer-php vendors


【解决方案1】:

请注意,我直接评论了我在您的问题上看到的问题。

但是,我查看了您要使用的软件包,看看是否有机会以某种方式安装它(更喜欢 Composer)。我不认为这是可能的或可行的。

composer require customscripts/menubundle:dev-master - 这将是 Composer 执行所有操作的简单命令。但是也有问题:

  1. 您要使用的包没有在packagist.org上注册,所以没有办法简单地在一台正确连接到互联网的机器上使用Composer,抓取包,压缩它们并将它们传送到那个地方你需要它。

  2. 要解决此问题,您需要手动将存储库添加到 composer.json 文件 - 这实际上可能有效(但是在我的 VM 上花费了太多时间)。您将得到最后一次编辑在 2012 年的代码!

  3. 该代码的依赖关系可能不再起作用。该软件包的composer.json 列出了"require": {"knplabs/knp-menu-bundle": "dev-master", "symfony/framework-bundle": ">=2.0,<2.3-dev", "jms/di-extra-bundle": "1.1.*"}——即使是第一个“knplabs/knp-menu-bundle”也永远不会工作。请记住,这个包的代码是从 2012 年开始的——现在我们在 2016 年,所以“knp-menu-bundle”在 master 分支上已经经历了四年的发展。根本无法知道这个包使用了哪个提交。您必须对丢失的信息进行逆向工程。

  4. 此外,您明白为什么 Composer 很棒,而手动操作很糟糕:除了您想要的包之外,您还必须下载此处提到的三个附加包。

  5. 但是检测必须添加的包是一个递归任务:knp-menu-bundle 依赖于 knp-menu(没有进一步的依赖)和 symfony/framework-bundle(已经添加)。 symfony/framework-bundle 本身依赖于另外 9 个 Symfony 包和学说/通用...等等。如果您无法使用 Composer,则必须检测其中的每个包并手动下载正确的版本。

跳过您的原始软件包,因为在我输入答案时安装尚未完成,我尝试安装 knp-menu-bundle 以查看将安装多少个软件包。 Composer 安装了 20 个包,其中一些在 2.8 中使用 Symfony(它应该与 Symfony 2.2 的东西兼容,不是吗) - 我只是运行 composer require knplabs/knp-menu-bundle:1.1.1 来获取 2012 年类似的旧版本的 knp-menu-bundle。

使用 Composer 的优势在于它支持快速开发,允许快速更新、可靠地降级(如果您提交 composer.lock 文件并始终使用标记版本),并且只允许立即添加新包。作为 PHP 开发人员,不能使用 Composer 是一个非常严重的限制。与您的老板或团队负责人讨论您公司使用 HTTPS 代理的情况,并找到使用 Composer 的解决方案。另一种方法是自己从头开始开发所有内容,或者浪费大量时间来尝试手动下载无法轻松组合在一起的内容。

【讨论】:

    猜你喜欢
    • 2016-07-18
    • 1970-01-01
    • 2018-01-15
    • 2018-10-21
    • 2021-01-18
    • 2019-08-17
    • 1970-01-01
    • 2016-06-11
    • 2021-10-07
    相关资源
    最近更新 更多