diff --git a/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php b/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php index 00f8e189519d..04b1a1d9158c 100644 --- a/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php +++ b/typo3/sysext/core/Classes/Composer/PackageArtifactBuilder.php @@ -21,6 +21,7 @@ use Composer\Repository\PlatformRepository; use Composer\Script\Event; use Composer\Util\Filesystem; +use Composer\Util\Platform; use TYPO3\CMS\Composer\Plugin\Config; use TYPO3\CMS\Composer\Plugin\Core\InstallerScript; use TYPO3\CMS\Composer\Plugin\Util\ExtensionKeyResolver; @@ -32,6 +33,7 @@ use TYPO3\CMS\Core\Package\Package; use TYPO3\CMS\Core\Package\PackageManager; use TYPO3\CMS\Core\Service\DependencyOrderingService; +use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\PathUtility; /** @@ -160,6 +162,7 @@ private function extractPackageMapFromComposer(): array function (array $packageAndPath) use ($rootPackage, &$usedExtensionKeys) { [$composerPackage, $packagePath] = $packageAndPath; $packageName = $composerPackage->getName(); + $packagePath = GeneralUtility::fixWindowsFilePath($packagePath); try { $extensionKey = ExtensionKeyResolver::resolve($composerPackage); } catch (\Throwable $e) { @@ -268,7 +271,9 @@ private function publishResources(array $installedTypo3Packages): void [$relativePrefix] = explode('Resources/Public', $relativePath); $publicResourcesPath = $fileSystem->normalizePath($this->config->get('web-dir') . '/_assets/' . md5($relativePrefix)); $fileSystem->ensureDirectoryExists(dirname($publicResourcesPath)); - if (!$fileSystem->isSymlinkedDirectory($publicResourcesPath)) { + if (Platform::isWindows() && !$fileSystem->isJunction($publicResourcesPath)) { + $fileSystem->junction($fileSystemResourcesPath, $publicResourcesPath); + } elseif (!$fileSystem->isSymlinkedDirectory($publicResourcesPath)) { $fileSystem->relativeSymlink($fileSystemResourcesPath, $publicResourcesPath); } }