Migrate Webpack to Vite
Deploy Spot / deploy (push) Successful in 22s

This commit is contained in:
2026-07-26 15:33:07 +02:00
parent fb500f3c34
commit 7da504ca6b
10 changed files with 943 additions and 3809 deletions
+47 -4
View File
@@ -44,6 +44,7 @@ class Spot extends Main
const PROJECT_NAME = 'LiveTrail';
const MAIN_PAGE = 'index';
const VITE_APP = 'src/app.js';
private Project $oProject;
private Media $oMedia;
@@ -165,6 +166,8 @@ class Spot extends Main
}
public function getAppMainPage(string $sCsrfToken='') {
$asViteAssets = $this->getViteAssets();
return parent::getMainPage(
array(
'projects' => $this->oProject->getProjects(),
@@ -186,18 +189,58 @@ class Spot extends Main
'tags' => [
'language' => $this->oLang->getLanguage(),
'title' => self::PROJECT_NAME,
'app_entry' => $asViteAssets['app']
],
'instances' => [
'entrypoint' => $this->getAppEntryPoints()
'css' => $asViteAssets['css'],
'module' => $asViteAssets['module']
]
)
);
}
private function getAppEntryPoints() {
private function getViteAssets() {
$asManifest = json_decode(file_get_contents(__DIR__.'/../public/.vite/manifest.json'), true);
$asAppImport = $asManifest[self::VITE_APP];
//Recursive search for chunk imports
$asImports = array();
$asSeenImports = array(self::VITE_APP => true);
$this->appendViteImportedChunks($asManifest, $asAppImport, $asSeenImports, $asImports);
//CSS
$asCssFiles = array();
foreach(array_merge(array($asAppImport), $asImports) as $asChunk) {
foreach($asChunk['css'] ?? array() as $sCssFile) $asCssFiles[] = $sCssFile;
}
//Modules
$asModuleFiles = array();
foreach($asImports as $asImport) {
if(str_ends_with($asImport['file'] ?? '', '.js')) $asModuleFiles[] = $asImport['file'];
}
return array(
'app' => $asAppImport['file'],
'css' => $this->getViteAssetInstances($asCssFiles),
'module' => $this->getViteAssetInstances($asModuleFiles)
);
}
private function appendViteImportedChunks($asManifest, $asChunk, &$asSeenImports, &$asImports) {
foreach($asChunk['imports'] ?? array() as $sImport) {
if(isset($asSeenImports[$sImport]) || !isset($asManifest[$sImport])) continue;
$asSeenImports[$sImport] = true;
$this->appendViteImportedChunks($asManifest, $asManifest[$sImport], $asSeenImports, $asImports);
$asImports[] = $asManifest[$sImport];
}
}
private function getViteAssetInstances($asFilePaths) {
return array_map(
function($sFileName) {return ['filename' => self::addTimestampToFilePath($sFileName)];},
json_decode(file_get_contents('assets/entrypoints.json'), true)['entrypoints']['app']
function($sFilePath) { return array('filename' => $sFilePath); },
$asFilePaths
);
}