忽略 packagist.org 并指定一个包的路径
Ignore packagist.org and specify path for one bundle
我修改了一个 symfony 4 包来修复一些错误。我现在想通过 https://deployer.org/.
部署我的项目
所以我在 .gitignore 中添加了这个没有被忽略的包,这样我修改过的包的文件夹就可以在我的 github 仓库中找到。
当执行deployer的“deploy
”命令时,它会执行命令“/composer.phar install --verbose --prefer -dist --no-progress --no-interaction --no-dev --optimize-autoloader --no-suggest
”,这样我的bundle edit的文件夹就被[=16=的原始bundle文件夹覆盖了].
我想修改我的 composer.json 以定义我修改后的包的路径并且它不会被覆盖。
这是我在主项目的 composer.json 中尝试的方法:
{
"type": "my-project",
"license": "proprietary",
"repositories": [
{
"type": "path",
"url": "/vendor/my/modifiedBundle",
"packagist.org": false,
}
],
"require": {
......
"my/modifiedBundle": "0.6.1",
......
},
"require-dev": {
.....
},
"config": {
"preferred-install": {
"my/modifiedBundle": "source",
"*": "dist"
},
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\Tests\": "tests/"
}
},
"replace": {
....
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"conflict": {
"symfony/symfony": "*"
},
"extra": {
"symfony": {
"allow-contrib": true,
"require": "4.3.*"
}
}
}
这是我修改后的包的composer.json:
{
"name": "my/modifiedBundle",
"type": "symfony-bundle",
"license": "MIT",
"require": {
...
},
"require-dev": {
...
},
"config": {
"sort-packages": true
},
"autoload": {
"psr-4": {
"my\modifiedBundle\": ""
}
},
"autoload-dev": {
"psr-4": {
"my\modifiedBundle\Tests\": "tests/"
}
}
}
但是我修改后,修改后的bundle还是被原来的bundle覆盖了,你知道吗?
@Skros2 解决了他的问题:
- 将包分叉到它自己的存储库
- 编辑分叉
- 在他的
composer.json
项目 中引用他的分支
如何refer分叉。
{
"repositories": [
{
"type": "git",
"url": "https://github.com/foobar/intermediate.git"
},
{
"type": "pear",
"url": "http://pear.foobar.repo",
"vendor-alias": "foobar"
}
],
"require": {
"foobar/TopLevelPackage1": "*",
"foobar/TopLevelPackage2": "*"
}
}
我修改了一个 symfony 4 包来修复一些错误。我现在想通过 https://deployer.org/.
部署我的项目所以我在 .gitignore 中添加了这个没有被忽略的包,这样我修改过的包的文件夹就可以在我的 github 仓库中找到。
当执行deployer的“deploy
”命令时,它会执行命令“/composer.phar install --verbose --prefer -dist --no-progress --no-interaction --no-dev --optimize-autoloader --no-suggest
”,这样我的bundle edit的文件夹就被[=16=的原始bundle文件夹覆盖了].
我想修改我的 composer.json 以定义我修改后的包的路径并且它不会被覆盖。
这是我在主项目的 composer.json 中尝试的方法:
{
"type": "my-project",
"license": "proprietary",
"repositories": [
{
"type": "path",
"url": "/vendor/my/modifiedBundle",
"packagist.org": false,
}
],
"require": {
......
"my/modifiedBundle": "0.6.1",
......
},
"require-dev": {
.....
},
"config": {
"preferred-install": {
"my/modifiedBundle": "source",
"*": "dist"
},
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\Tests\": "tests/"
}
},
"replace": {
....
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"conflict": {
"symfony/symfony": "*"
},
"extra": {
"symfony": {
"allow-contrib": true,
"require": "4.3.*"
}
}
}
这是我修改后的包的composer.json:
{
"name": "my/modifiedBundle",
"type": "symfony-bundle",
"license": "MIT",
"require": {
...
},
"require-dev": {
...
},
"config": {
"sort-packages": true
},
"autoload": {
"psr-4": {
"my\modifiedBundle\": ""
}
},
"autoload-dev": {
"psr-4": {
"my\modifiedBundle\Tests\": "tests/"
}
}
}
但是我修改后,修改后的bundle还是被原来的bundle覆盖了,你知道吗?
@Skros2 解决了他的问题:
- 将包分叉到它自己的存储库
- 编辑分叉
- 在他的
composer.json
项目 中引用他的分支
如何refer分叉。
{
"repositories": [
{
"type": "git",
"url": "https://github.com/foobar/intermediate.git"
},
{
"type": "pear",
"url": "http://pear.foobar.repo",
"vendor-alias": "foobar"
}
],
"require": {
"foobar/TopLevelPackage1": "*",
"foobar/TopLevelPackage2": "*"
}
}