buildPath = __DIR__ . '/../dist'; $this->publicPath = '/dist'; // Load manifest if it exists $this->loadManifest(); } /** * Load webpack manifest for asset management */ private function loadManifest(): void { $manifestPath = $this->buildPath . '/static/js/manifest.json'; if (file_exists($manifestPath)) { $manifest = json_decode(file_get_contents($manifestPath), true); $this->manifest = $manifest ?: []; } } /** * Check if React build exists */ public function isBuilt(): bool { return file_exists($this->buildPath . '/static/js/bundle.js') && file_exists($this->buildPath . '/static/css/main.css'); } /** * Get JavaScript bundle URL */ public function getJsBundle(): string { if (isset($this->manifest['main.js'])) { return $this->publicPath . '/' . $this->manifest['main.js']; } return $this->publicPath . '/static/js/bundle.js'; } /** * Get CSS bundle URL */ public function getCssBundle(): string { if (isset($this->manifest['main.css'])) { return $this->publicPath . '/' . $this->manifest['main.css']; } return $this->publicPath . '/static/css/main.css'; } /** * Render React root element */ public function renderRoot(string $elementId = 'react-app', array $props = []): string { $propsJson = json_encode($props, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); return "
"; } /** * Render React scripts */ public function renderScripts(): string { if (!$this->isBuilt()) { return $this->renderFallbackScripts(); } $jsUrl = $this->getJsBundle(); $cssUrl = $this->getCssBundle(); $scripts = []; // CSS if (file_exists($this->buildPath . str_replace($this->publicPath, '', $cssUrl))) { $scripts[] = ""; } // JavaScript $scripts[] = ""; return implode("\n", $scripts); } /** * Render fallback scripts when React is not built */ private function renderFallbackScripts(): string { return ""; } /** * Initialize React app with props */ public function initApp(string $elementId = 'react-app', array $props = []): string { $propsJson = json_encode($props, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); $script = <<Componentes React não disponíveis. Execute 'npm run build' para ativar.
Para ativar a aplicação React completa:
npm install && npm run build