Composer:如何在没有网络连接的情况下添加依赖项?

Posted

技术标签:

【中文标题】Composer:如何在没有网络连接的情况下添加依赖项?【英文标题】:Composer : how to add a dependency without network connection? 【发布时间】:2014-12-10 07:28:12 【问题描述】:

我的专业网络阻止了互联网访问。一个月前,我从存档(包含 composer.json 文件)和 composer.phar 下载了 Silex 框架,然后通过 HDD 将它们传输到我的桌面上。

我自定义的 composer.json:


    "name": "user/silex",
    "require": 
        "silex/silex": "1.2"
                , "twig/twig": ">=1.8,<2.0-dev"
                , "doctrine/dbal": "2.2.*"
                , "symfony/security": "~2.3"
                , "symfony/security": "~2.3"
    ,
    "autoload": 
        "psr-4": 
            "Portal\\": "src/"
        
    

它工作正常,我的自动加载自定义也是。

今天我想添加monolog/monolog包,所以我从另一台电脑手动导入。

我把它放在我的供应商文件夹中,我将以下行添加到我的 composer.json 文件中:

, "monolog/monolog": ">=1.0.0"

我在控制台上运行:

php composer.phar dumpautoload

它输出: 生成自动加载文件

然后它没有错误地停止,但独白命名空间没有出现在我的 /vendor/composer/autoload_*.php 文件中。

我错过了什么?

【问题讨论】:

我感觉最好的方法是指定您自己的自定义存储库并将实际存储库下载到您的计算机,然后引用您的本地存储库。我不知道该怎么做,或者如果可能的话 - getcomposer.org/doc/05-repositories.md @edmondscommerce 你明白了,我必须创建一个工件存储库 酷,这看起来像是前进的方向。为其他人解决这个问题而详细回答究竟如何做对你有好处 @edmondscommerce 完成并感谢 ;) 【参考方案1】:

感谢edmondscommerce的评论我找到了解决办法:

我用artifact 存储库更新了我的主composer.json 文件(并且我禁用了packagist 存储库):


    "name": "user/silex",
    "repositories": [
        
            "type": "artifact",
            "url": "artifact/"
        , 
            "packagist": false
        
    ], "require": 
        "silex/silex": "1.2"
                , "twig/twig": ">=1.8,<2.0-dev"
                , "monolog/monolog": "1.*"
                , "doctrine/dbal": "2.2.*"
                , "symfony/security": "~2.3"
    ,
    "autoload": 
        "psr-4": 
            "Portal\\": "src/"
        
    

然后我根据composer.json文件里放的url放了一个叫artifact的文件夹。

我在这个文件夹中创建了一个名为 monolog-monolog-1.8.zip 的压缩包,其中包含我要添加的库。

然后只需启动 composer update 命令!

注意,zip 的根目录必须包含一个 composer.json 文件,而这个 composer.json 文件必须包含一个版本!

【讨论】:

【参考方案2】:

如果您不想创建自定义存储库,也可以在联网计算机上的副本上运行 composer install(或 composer update)。然后,您可以将新添加和提取的组件复制到机器上的供应商文件夹中,而无需访问 Internet。请注意,您还需要复制vendor/composer/installed.json 以让composer 知道新包已安装。一旦你复制了所有这些文件,你可以在没有互联网访问的机器上运行composer install,它不会尝试安装任何东西并转储自动加载文件。

【讨论】:

以上是关于Composer:如何在没有网络连接的情况下添加依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有互联网连接的情况下创建一个新的 laravel 项目? [复制]

解决Windows下网络原因Composer安装失败问题的方法

XML 命名空间在没有有效网络连接的情况下如何工作?

ios:如何在没有连接设备的情况下将新的 UDID 添加到配置文件?

在没有 Composer 的情况下安装 Laravel

如何在UBUNTU系统下显示网络连接错误