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


Composer : how to add a dependency without network connection?

我的专业网络阻止了互联网访问。一个月前,我从一个档案中下载了Silex框架(其中包含composer.json文件)和composer.phar文件,然后通过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

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

然后它就停止了,但monlog名称空间没有出现在我的/vendor/composer/autoload_*.php文件中。

我错过了什么?

感谢edmondscommerce的评论,我找到了解决方案:

我用工件repository更新了我的主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的zip,其中包含我想要添加的库。

然后启动composer update命令!

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

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