如何在 assetic 的 Symfony 中使用 CSS 和 JS 缩小

How to use CSS and JS minification in Symfony from assetic

我正在尝试使用 assetic 在 Symfony 项目中设置 CSS 和 JS 缩小。我不能使用 java 或 node.js 或类似的东西,所以我按照 userlond 在 Symfony2 minify without java or node 的指示来获取 assetic 中使用 minify 为我做的过滤器。

我按照说明操作并通过 composer 安装了 minify,但在进行资产转储时我不断收到以下信息:

php.CRITICAL: Fatal Error: Class 'JSMinPlus' not found {"exception":"[object] (Symfony\Component\Debug\Exception\FatalErrorException(code: 0): Error: Class 'JSMinPlus' not found at /var/www/html/new_test_1/vendor/kriswallsmith/assetic/src/Assetic/Filter/JSMinPlusFilter.php:32)"}

[Symfony\Component\Debug\Exception\ClassNotFoundException]      
  Attempted to load class "JSMinPlus" from the global namespace.  
  Did you forget a "use" statement?

如果我不尝试使用 jsminplus 过滤器,但仍在使用 minifycsscompressor 过滤器,它似乎一切正常(而且我得到了 CSS 缩小)。

在 minify 项目中是否发生了某些导致不兼容或其他问题的更改?

我在 TWIG 模板中使用的代码是:

{% javascripts
    '@TemplateBundle/Resources/public/media/site-assets/javascript/vendor/jquery-1.12.1.min.js'
    '@TemplateBundle/Resources/public/media/site-assets/javascript/vendor/*.js'
    '@TemplateBundle/Resources/public/media/site-assets/javascript/*.js'
    filter='jsminplus'
%}

    <script src="{{ asset_url }}"></script>

{% endjavascripts %}

如果我去掉 filter='jsminplus' 行,一切正常(只是没有缩小)。

你所依据的答案已经过时,资产从那时起发生了变化。 因此,除非你专门使用旧版本的 Symfony,否则你将需要一些类似于

的东西
# app/config/config.yml
assetic:
    filters:
        jsqueeze: ~
        # ...

然后

{% javascripts filter="?jsqueeze" output="js/app.js"
    "@TemplateBundle/Resources/public/media/site-assets/javascript/*.js"
    "@TemplateBundle/Resources/public/media/site-assets/javascript/vendor/*.js"
    "@TemplateBundle/Resources/public/media/site-assets/javascript/*.js"
%}
    <script src="{{ asset_url }}"></script>
{% endjavascripts %}

注意那个?在 ?jsqueeze 中意味着这只会在生产环境中缩小。

参见documentation for a non javascript minifying solution