忽略 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": "*"
    }
}