我开始为包含多个子存储库的项目做贡献:
主软件包可以在现有项目中单独使用,并且其所有依赖项都在composer.json中作为典型列表列出。
Helper软件包,用于设置新的Laravel项目,将主软件包(上方)添加为依赖项(通过composer require
),并执行许多初始化命令和设置过程。
我需要在本地计算机上同时处理这两个软件包,但是我只能让Composer引用安装程序的本地分支(下面的全局composer.json中的using a local repository),而不是主软件包。
{
"repositories": [{
"type": "vcs",
"url": "../code/asdf-installer"
}],
"require": {
"asdf/asdf-installer": "dev-master"
}
}
使用此设置,当我运行composer global update
时,Composer会提取我对本地安装程序软件包内部版本的提交。但是,由于主程序包是通过编程方式安装到新项目中的,因此无法使Composer引用我对该程序包的本地版本。
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('<info>Creating new project...</info>');
$composer = $this->findComposer();
$directory = $input->getArgument('name');
$commands = [
// create new laravel project
$composer . ' create-project --prefer-dist laravel/laravel ' . $directory,
// change to the project directory
'cd ' . $directory,
// load project dependencies
$composer . ' require asdf/asdf',
...
];
$process = new Process(implode(' && ', $commands), null, null, null, null);
$process->run(function ($type, $line) use ($output) {
$output->write($line);
});
$output->writeln('<comment>Project created.</comment>');
}
我希望能够像使用安装程序包在全局composer.json中所做的那样设置主包的存储库。但是考虑到我需要编辑的composer.json是由Laravel项目提供的,因此installer命令执行的任何composer require
都会提取 published 包,而不会看到本地资料库。我无法事先设置存储库URL,而且不想添加任何仅开发人员命令,而只需要在推送更改之前将其删除即可。将本地存储库添加到我的全局composer.json并不能解决问题。
有更好的方法吗?