我遵循了本文底部的指南:http://symfony.com/doc/current/cookbook/assetic/asset_management.html
我有这个代码:
{% javascripts
...
output='js/dist/dist.js'
%}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
现在,如果我运行sf assetic:dump --env=prod
,它会正确地创建编译后的文件。然而,我希望它生成一个随机名称(或时间戳),这样就可以避免客户端浏览器缓存问题。现在,它总是创建缓存的dist.js
文件,当我更新代码时,用户不会看到差异(或出现错误)。
有没有办法让它像dist12345678.js
一样?
这里有两个选项:要么省略输出文件名(然后它将是一个自动生成的哈希,会发生变化),要么使用资产版本,如Symfony文档中所述:http://symfony.com/doc/current/reference/configuration/framework.html#ref-框架资产版本
我已经为一个项目做了很多Assetic的实验,我偶然发现了一种完全按照您的要求执行的方法。如果"输出"字符串包含"*",则用一个皮肤生成的任意字符串来代替它
例如,我在一个模板中有以下内容(PHP,我们没有使用trick):
<?php foreach($view['assetic']->javascripts(array('@MyBundle/Resources/public/js/page.js'), array(), array('output' => 'js/compiled/page_*.js')) as $url): ?>
<script type="text/javascript" src="<?php echo $view->escape($url) ?>"></script>
<?php endforeach; ?>
<?php foreach($view['assetic']->stylesheets(array('@MyBundle/Resources/public/css/page.css'), array(), array('output' => 'css/compiled/page_*.css')) as $url): ?>
<link rel="stylesheet" href="<?php echo $view->escape($url) ?>" />
<?php endforeach; ?>
当我运行app/console assetic:dump时,它会生成/web/css/compiled/page_8e8fcb3.css和/web/js/compilet/page_241b4e5.js.
更好的方法是https://github.com/symfony/AsseticBundle/pull/119#issuecomment-28877145
你会得到:
app/console assetic:dump --env=prod --no-debug
Dumping all prod assets.
Debug mode is off.
[file+] /web/assets/static-fe1927d.css
[file+] /web/assets/static-6e92057.js