示例#1
0
 /**
  * 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);
 }