symfony 2中的Assetic + YUI Compressor:这是一个错误吗?

Hap*_*per 10 php yui-compressor symfony

我已经在命令行(在Windows上)测试了YUI压缩器,它似乎工作得很好.

但是由assetic创建的.css没有被压缩,并且在顶部附带此消息(在.css内部!):

/*
[exception] 500 | Internal Server Error | RuntimeException
[message] 
[1] RuntimeException: 
            at n/a
                in E:\websites\symfony2\public_html\Symfony\vendor\assetic\src\Assetic\Filter\Yui\BaseCompressorFilter.php line 81

            at Assetic\Filter\Yui\BaseCompressorFilter->compress('
Run Code Online (Sandbox Code Playgroud)

这是配置问题吗?或者资产中的错误?

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

{% stylesheets '@CompanyBundlenameBundle/Resources/public/css/style.css' filter='yui_css' %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)

小智 5

我有同样的问题...(问题似乎只出现在Windows上)我找到的唯一方法,真的很脏:

1 - 在配置文件中指定java可执行文件路径(在yui jar声明路径的相同位置)

yui_css:
    jar: "%kernel.root_dir%\\Resources\\java\\yuicompressor.jar"
    java: "C:\\Program Files\\Java\\jre6\\bin\\java.exe"
Run Code Online (Sandbox Code Playgroud)

2 - 打开Assetic\Util\Process.php文件在"run"方法中更改"proc_open"行(第123行我的版本)原始行:

$process = proc_open($this->commandline, $descriptors, $pipes, $this->cwd, $this->env, $this->options);
Run Code Online (Sandbox Code Playgroud)

修改后的行:

$process = proc_open('"'.$this->commandline.'"', $descriptors, $pipes, $this->cwd, $this->env, $this->options);
Run Code Online (Sandbox Code Playgroud)

它的工作原理......但不是真正的解决方案......

如果有人有更多的信息.​​.....谢谢:)


Jan*_*lak 5

如果您使用的是最新的稳定版本(1.0.2),那么它有一个错误,阻止它在Windows上正确使用YUI压缩器.正如@Pierre指出的那样,问题在于调用proc_open函数的方式,但修复应该应用于其他地方.

如果您查看Assetic\Util\ProcessBuilder类,您将在第95行找到罪魁祸首:

#95 if (defined('PHP_WINDOWS_MAJOR_VERSION')) {
Run Code Online (Sandbox Code Playgroud)

在PHP中没有这样的常量PHP_WINDOWS_MAJOR_VERSION(http://php.net/manual/en/info.constants.php),这使得if语句测试评估为false.应该使用的是什么PHP_WINDOWS_VERSION_MAJOR.

我在本课程中发现的第二个问题如下:

#102 if ($args) {
#103   $script .= ' '.implode(' ', array_map('escapeshellarg', $parts));
#104 }
Run Code Online (Sandbox Code Playgroud)

$parts未在此范围内定义,应替换为$args.

正如我后来发现的那样,这两个问题都在16.09修正了这个提交:https://github.com/kriswallsmith/assetic/commit/cc2e9adb744df0704a5357adc1cf9287c427420f 但是代码还没有被标记.

希望这可以帮助.


ege*_*oen 4

YUI 压缩器需要app/config/config.yml像这样定义:

assetic:
    debug:          %kernel.debug%
    use_controller: false
    filters:
        cssrewrite: ~
        yui_css:
            jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar
Run Code Online (Sandbox Code Playgroud)

当然,你需要下载YUI压缩器并将其复制到你的/app/Resources/java/目录中。

警告,assetic 包不会自动发布您的压缩 CSS,您需要使用以下命令手动发布它们:

php app/console assetic:dump 
Run Code Online (Sandbox Code Playgroud)