我希望资产输出压缩的js和css到这样的东西:
v2.3.1/css/whatever.css
目前,这就是我将css和js转储到生产的方式:$ php app/console assetic:dump --env=prod --no-debug
。但它们被转储到css /和js /中,没有版本。
我看过this,但它似乎只是指图像,而不是css / js。
执行此操作的一个重要原因是缓存清除/失效。
答案 0 :(得分:3)
是的,已知问题...在我们的制作工作流程中,我们最终在bin/vendors
脚本中使用了这样的块:
if (in_array('--env=dev', $argv)) {
system(sprintf('%s %s assets:install --symlink %s', $interpreter, escapeshellarg($rootDir . '/app/console'), escapeshellarg($rootDir . '/web/')));
system(sprintf('%s %s assetic:dump --env=dev', $interpreter, escapeshellarg($rootDir . '/app/console')));
system(sprintf('%s %s myVendor:assets:install --symlink ', $interpreter, escapeshellarg($rootDir . '/app/console')));
} else {
system(sprintf('%s %s assets:install %s', $interpreter, escapeshellarg($rootDir . '/app/console'), escapeshellarg($rootDir . '/web/')));
system(sprintf('%s %s assetic:dump --env=prod --no-debug', $interpreter, escapeshellarg($rootDir . '/app/console')));
system(sprintf('%s %s myVendor:assets:install ', $interpreter, escapeshellarg($rootDir . '/app/console')));
}
如您所见,我们定义了我们的控制台命令,该命令在安装和转储Symfony的资产后将资产安装到Web文件夹中。在MyVendorCommand
脚本中,我们执行以下操作:
$version = $this->getContainer()->getParameter('your_version_parameter');
$assetsInstallCommand = $this->getApplication()->find('assets:install');
$commandOptions = $input->getOptions();
$assetsInstallArguments = array(
'command' => 'assets:install',
'target' => 'web/version-' . $version,
'--symlink' => $commandOptions['symlink']
);
$assetsInstallInput = new ArrayInput($assetsInstallArguments);
$returnCode = $assetsInstallCommand->run($assetsInstallInput, $output);
答案 1 :(得分:1)
何,这是一个很大的Symfony2漏洞!我不确定有人报道过它!
我的解决方案是在Nginx配置中添加一个别名,但你的是def。清洁与清洁更好。
答案 2 :(得分:0)
我的解决方法是在.htaccess文件中创建一个rewriteRule,以便提供真实文件,但接受带有版本号的完整URL。像这样......
[...]
engines: ['twig']
assets_version: 20140523 # numeric version
assets_version_format: "assets-%%2$s/%%1$s"
[...]
[...]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^assets-([0-9]*)/(.*)$ ./$2 [L]
[...]