【发布时间】:2018-03-16 18:31:10
【问题描述】:
我有多个 composer.json 具有多个单独的依赖项,并希望使用单个 composer install 命令在两个 composer.json 中安装所有依赖项。
位置是这样的:
| - composer.json
| - Custom
| - Package1
| - composer.json
第一个composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.6.4",
"barryvdh/laravel-debugbar": "^2.3",
"laravel/framework": "5.4.*",
"laravel/tinker": "~1.0",
"laravelcollective/html": "^5.4.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~5.7",
"symfony/css-selector": "3.1.*",
"symfony/dom-crawler": "3.1.*"
},
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
],
"post-install-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postInstall",
"php artisan optimize"
],
"post-update-cmd": [
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
"php artisan optimize"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
}
}
Package1目录中的第二个composer.json
{
"name": "custom/package1",
"description": "",
"require": {
"php": ">=5.6",
"composer/installers": "~1.0",
"lavary/laravel-menu": "1.7.1"
},
"autoload": {
"psr-4": {
"Custom\\Package1\\": ""
}
}
}
我想将Package1 中的lavary/laravel-menu 安装到安装了所有默认软件包的主供应商目录中。
|- vendor //<==want here
| - composer.json
| - Custom
| - Package1
| - vendor //<== not here
| - composer.json
我已经测试过这个解决方案:
像这样:
{
"config": {
"vendor-dir": "../../vendor/"
}
}
这会安装包,但我们需要进入第二个 composer.json 而不是主 composer.json 并从第一个 composer.json 中删除已安装的包。
如何在不进入单个供应商目录中的第二个或多个 composer.json 的情况下从主 composer.json 安装所有依赖项?
【问题讨论】:
-
尝试合并这 2 个作曲家文件。
-
composer 已经处理了这一切。你不应该接触供应商代码。如果您无法获取要解析的软件包,请尝试删除 composer.lock 文件
-
@MohammadTrabelsi 我无法合并不同的作曲家,因为它们应该分开保存以维护依赖关系,如果我们删除自定义包,它们将被删除
-
Composer 本身不支持此功能,但您可以使用 composer-merge-plugin 包。
-
@delboy1978uk 我不是在谈论触摸供应商代码。它将删除其他依赖项,因为将在供应商中列出但在第二个 composer.json 中没有列出的依赖项。 composer.lock 也不会妨碍我,因为我可以使用 composer update 但这对我来说不是问题。
标签: php laravel-5 composer-php vendor