/** * Rewrites require js script. * * @param string Input module path * @param string Rewritten module javascript */ public static function rewriteKernel(\Adadgio\Common\Config $config, $devKernelFile, $kernelOutputFile) { $script = file_get_contents($kernelOutputFile); $devScript = file_get_contents($devKernelFile); $script = Dependency::unspacify($script); $devScript = Dependency::unspacify($devScript); // at this stage the requireJS library is embedded into the kernel output file // at this stage the final kernel is located just at the top of the _build directory // add some config at the end of the kernel file $baseDir = basename($config->get('base_dir')); $baseDir = '/' . trim($baseDir, '/') . '/'; // must be "/dir/" to resolve relative path to "domain/dir/_build" $script .= "\n" . '/** Added by Module::rewriteKernel() **/' . "\n"; $script .= "require.config({ baseUrl: '{$baseDir}' });" . "\n"; // find kernel require main annotation and whole function $innerScript = (new AnnotationFunctionCapture($devScript, '@Melody\\Kernel'))->getScript(); // replace inner script dependencies $innerScript = 'require' . self::rewriteRequireDependencies($config, $innerScript); // replace config values from inner script $innerScript = preg_replace("~\\.setConfig\\('env','dev'\\)~", ".setConfig('env','prod')", $innerScript); $innerScript = preg_replace("~\\.setConfig\\('debug',true\\)~", ".setConfig('debug',false)", $innerScript); // add all that to the kernel final output script $script .= "\n"; $script .= $innerScript; return file_put_contents($kernelOutputFile, $script); }