gpt4 book ai didi

composer-php - 从 Composer 脚本/ Composer API 获取软件包安装路径

转载 作者:行者123 更新时间:2023-12-04 04:55:39 26 4
gpt4 key购买 nike

从 Composer 安装此软件包后,我想复制位于软件包内的一些文件。

实际上,我希望在从 Composer 安装或更新软件包后,将下载的软件包中可能存在的某个文件复制到另一个目录。我用 scripts ,使用 post-package-install 和 post-package-update 命令,但我没有找到如何获取安装路径。

这是我当前的脚本:

use Composer\Script\PackageEvent;

class MyScript {

public static function copyFiles(PackageEvent $event)
{
$package = $event->getOperation()->getPackage();

$originDir = $package->someFunctionToFind(); #Here, I should retrieve the install dir

if (file_exists($originDir) && is_dir($originDir)) {
//copy files from $originDir to a new location
}

}
}

有谁知道如何从 PackageEvent 类(在参数中提供)获取已安装/更新包的安装目录?

注意:

我试过 $event->getOperation()->getPackage->targetDir()但这不提供安装路径,而是 targetDir of the package, defined in composer.json

最佳答案

我可以通过 Composer\Installation\InstallationManager::getInstallPath 获得安装路径方法。

理论答案:

use Composer\Script\PackageEvent;

class MyScript {

public static function copyFiles(PackageEvent $event)
{
$package = $event->getOperation()->getPackage();
$installationManager = $event->getComposer()->getInstallationManager();

$originDir = $installationManager->getInstallPath($package);

if (file_exists($originDir) && is_dir($originDir)) {
//copy files from $originDir to a new location
}

}
}

但这个答案是理论上的,因为我无法在没有真正安装包的情况下找到调试我的代码的方法(这很痛苦:我应该删除一个包,然后重新安装它以检查我的代码)。

所以我切换到 post-install-cmd 和 post-update-cmd,我来了:
use Composer\Script\CommandEvent; #the event is different !

class MyScript {

public static function copyFiles(CommandEvent $event)
{
// wet get ALL installed packages
$packages = $event->getComposer()->getRepositoryManager()
->getLocalRepository()->getPackages();
$installationManager = $event->getComposer()->getInstallationManager();

foreach ($packages as $package) {
$installPath = $installationManager->getInstallPath($package);
//do my process here
}
}
}

不要忘记将命令添加到 composer.json :
"scripts": {

"post-install-cmd": [
"MyScript::copyFiles"
],
"post-update-cmd": [
"MyScript::copyFiles"
]
}

为了调试代码,我必须运行 composer.phar run-script post-install-cmd。

注意:此代码应该适用于 psr4。对于 psr0,可能需要添加 $package->targetDir() 以获得正确的安装路径。随意评论或改进我的答案。

关于composer-php - 从 Composer 脚本/ Composer API 获取软件包安装路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27194348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com