gpt4 book ai didi

symfony - 使用 png 优化的静态 Assets 转储引用了错误的文件

转载 作者:行者123 更新时间:2023-12-01 23:25:23 25 4
gpt4 key购买 nike

我正在尝试使用 Symfony2 构建一个项目并包括所有可能的优化。其中之一是优化 html 中使用的图像。 Symfony2 有一个 bundle Assetic 允许使用例如直接从 Twig 模板中选择。文档在这里:http://symfony.com/doc/2.0/cookbook/assetic/jpeg_optimize.html

我遇到的问题是,一切都在开发环境中工作(所有 Assets 都通过 Controller 提供服务),但 CLI 命令转储到一个文件,而不是在呈现的模板中使用。

这是转储 Assets 时的输出,之后文件在/web/assetic 中可用

Dumping all prod assets.
Debug mode is off.

[file+] /home/projects/dashboard/data/dashboard/app/../web/js/4a3b4dc.js
[file+] /home/projects/dashboard/data/dashboard/app/../web/css/9640074.css
[file+] /home/projects/dashboard/data/dashboard/app/../web/assetic/1d666d2.png
[file+] /home/projects/dashboard/data/dashboard/app/../web/assetic/dfaa6c9.png
[file+] /home/projects/dashboard/data/dashboard/app/../web/assetic/5f2dd31.png

当我查看页面时,这些 url 被调用

<img src="/assetic/ad39e3f.png">
<img src="/assetic/69fbd4a.png">
<img src="/assetic/e4a4ede.png">

但 Css 和 js 确实有效。

我的配置文件:

# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: false
java: /usr/bin/java
filters:
cssrewrite: ~
closure:
jar: %kernel.root_dir%/Resources/java/compiler.jar
yui_css:
jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar
optipng:
apply_to: "\.png$"
level: 3
jpegoptim:
apply_to: "\.jpe?g$"
strip_all: true
twig:
functions:
jpegoptim: { output: images/*.jpg }
optipng: { output: images/*.png }

我的 Twig 模板:

 <img src="{{ optipng('@KunstmaanDashboardBundle/Resources/public/images/foursquare-logo.png') }}" style="margin-bottom: 0;" />

最佳答案

我用两种可能的 twig 语法做了一些测试,解决了这个问题。

<!-- standard syntax: -->
{% image 'img/promo/widget.autopromo.testimonial.jpg' filter='jpegoptim' output='img/*.js' %}
<img src="{{ asset_url }}" alt="Example"/>
{% endimage %}

<!-- twig function: -->
<img src="{{ jpegoptim('img/promo/widget.autopromo.activity.jpg') }}" />

我从以下配置开始

assetic:
debug: %kernel.debug%
use_controller: %kernel.debug%
read_from: %kernel.root_dir%/../web/static/
write_to: %kernel.root_dir%/../web/static/optimasset

filters:
jpegoptim:
bin: /usr/bin/jpegoptim
apply_to: "\.jpe?g$"
strip_all: true
twig:
functions:
jpegoptim: ~

在每次更改之间,我运行以下命令以确保清除缓存并转储新文件。

rm -Rvf app/cache/* # yes I wanted to make that sure cache is cleared
rm -Rvf web/static/optimasset;
app/console cache:clear --no-warmup;
app/console assetic:dump


00首先转储输出是

web/static/optimasset/images/e749c9f.jpg
web/static/optimasset/images/e749c9f_widget.autopromo.testimonial_1.jpg
web/static/optimasset/assetic
web/static/optimasset/assetic/bb69582.jpg
web/static/optimasset/assetic/bb69582_widget.autopromo.activity_1.jpg

和生成的html

<img src="/static/images/e749c9f_widget.autopromo.testimonial_1.jpg" alt="Example">
<img src="/static/assetic/c03bc54.jpg">

注意:

  • twig 函数生成了错误的文件名。
  • 在转储 Assets 时,两者都考虑 config.yml 中的 write_to 参数,但仍会创建一个默认文件夹(assetic/images ).
  • 两者在生成 html 时都忽略 write_to 参数,但使用它们在 framework.templating.assets_base_urls.http 中指定的文件夹之后的默认文件夹
  • Twig 函数生成带有错误文件名的 html


01 在config.yml中指定输出目录

filters:
jpegoptim:
bin: /usr/bin/jpegoptim
apply_to: "\.jpe?g$"
strip_all: true
output:'img/*.jpg' # just a test
twig:
functions:
jpegoptim: {output:'img/*.jpg'} # according to documentation

注意:您会得到完全相同的结果。这两种语法都不处理来自配置的“输出”(仅在 twig 中)。


02 在 Twig 模板中指定输出

顺便说一下,我将 optimasset/ 添加到输出路径,因为渲染不考虑 ````write_to``` 值。

{% image 'img/promo/widget.autopromo.testimonial.jpg' filter='jpegoptim' output='optimasset/img/*.jpg' %}
<img src="{{ asset_url }}" alt="Example"/>
{% endimage %}

<img src="{{ jpegoptim('img/promo/widget.autopromo.activity.jpg', {output:'optimasset/img/*.jpg'}) }}" />

转储:

web/static/optimasset/optimasset/img
web/static/optimasset/optimasset/img/974c414.jpg
web/static/optimasset/optimasset/img/974c414_widget.autopromo.testimonial_1.jpg
web/static/optimasset/optimasset/img/c230e9e.jpg
web/static/optimasset/optimasset/img/c230e9e_widget.autopromo.activity_1.jpg

呈现为:

<img src="/static/optimasset/img/974c414_widget.autopromo.testimonial_1.jpg" alt="Example">
<img src="/static/optimasset/img/080b62e.jpg">

注意:渲染正确但转储路径不正确。为了解决这个问题,我必须删除 write_to 参数。


结论

  • {{ optipng(...) }} as {{ jpegoptim(...) }} 从不输出正确的文件名。使用语法 {% images ... %}
  • 如果您使用 assetic 过滤图像,则不应使用 write_to {% images %} 在呈现 html 时不考虑它,仅 {% javascripts %}{% stylesheets %} 做。

关于symfony - 使用 png 优化的静态 Assets 转储引用了错误的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8225000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com