如何让Assetic + sass在Windows中与Symfony2一起使用?

mla*_*her 17 windows sass symfony assetic compass-sass

我试图让Assetic在Symfony 2.0.11中运行,以便将sass用于css文件.

我一直在摆弄这个问题几个小时,从我收集到的当前资产版本(1.0.2)搞砸了,在Windows中无法工作.

我尝试将资产和asseticBundle更新为github的最新Master版本,但是这些需要Symfony 2.1,它带来了很多变化并且不向后兼容(更不用说它也没有正式发布),所以这不是一个选项.

这个帖子上的symfony2 assetics yui压缩器在windows(路径语法)上提供了一些很好的洞察力,但遗憾的是它推荐的资产lib的变化不足以使它在我的环境中正常工作.

我在https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246chttps://github.com/kriswallsmith/assetic/issues/25中找到了一些有趣的内容.

最后,我所知道的是我需要更改vendor/assetic/src/Assetic/Util/ProcessBuilder.php,可能是包中的其他一些文件,也许在我的config.yml文件中添加一些信息(似乎在添加java或sass的路径可能有帮助).

我需要的是那些能够获得工作配置的人,让我指出我所缺少的东西,或者理想的是让那个该死的东西工作所需的步骤.

任何人都可以完成任务吗?

_____更新:仍在挖掘,现在只有3天了:/

新元素:

1/php5.3.8可能有proc_open和数据> 2048字节的问题,根据https://bugs.php.net/bug?php?id=60120 这个问题可能会影响从git存储库获取symfony(https: //github.com/symfony/symfony/issues/3216).发出"git config --global core.autocrlf input"并从git重新获取所有内容允许我使用php5.3.10而不会崩溃.

2/https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c看起来像是一个不错的基础.我在Process.php中对路径进行了一些小修改(参见https://github.com/kriswallsmith/assetic/issues/92),但我不确定它是否相关.无论如何,我从Assetic获得的命令行在shell中运行并输出预期的css.

3/sass.bat(位于Ruby193\bin中)需要拥有ruby.exe的绝对路径才能更进一步(我学到了很难的方法,你只看到错误信息,如果你var_dump并杀死脚本at正确的地方!)

现在,事情看起来好一点,但仍然没有使用sass(我认为它可以与其他一些过滤器一起使用)我设法在Process.php(在第172行附近)隔离了"$ data = fread($)管道,8192);" :脚本第二次在这个地方通过,$ pipe指向第二个资源,它永远不会返回...并且php卡住并且真的很难出现(我需要杀死/重启wamp至少两次到能够做另一个测试)

我真的不熟悉proc_open和stream,我很难理解代码在那里尝试做什么......

我希望这可以帮助下一个尝试让事情有效的人,并最终帮助我的案子.还在寻找一些支持!

_____Update:

进一步测试让我意识到当sass文件足够小时我可以使用"php app/console assetic:dump"工作.在我看来,实际的CSS规则(不包括变量定义和mixins)需要使用php5.3.10小于4096字节,甚至更少使用php 5.3.8.这指向https://bugs.php.net/bug.php?id=60120https://bugs.php.net/bug.php?id=51800中描述的proc_open错误

_____Update:

我试图安装php5.4来检查它是否正在解决问题.我花了一些时间才意识到这个版本在我的电脑上运行的原因是因为还没有x64版本.然后我安装了32位版本的wamp,并让php5.4轻松使用它.最终结果:proc_open仍然挂起:(我开始在这里没有想法......


演练:

所以,最终我让这个工作,并认为我试图总结以后的观众最重要的步骤:

1.安装Ruby 1.9.3和罗盘0.12

查看http://rubyinstaller.org/downloads/

将罗盘更新为0.12

"gem update --system"
Run Code Online (Sandbox Code Playgroud)

然后

"gem install compass"
Run Code Online (Sandbox Code Playgroud)

2.在罗盘中更改compiler.rb

在第10行转到Ruby193\lib\ruby​​\gems\1.9.1\gems\compass-0.12.0\lib\compass,替换

self.from, self.to = File.expand_path(from), to
Run Code Online (Sandbox Code Playgroud)

self.from, self.to = from.gsub('./', ''), to
Run Code Online (Sandbox Code Playgroud)

/!\有一些设置,它可能是相反的方式,但有我试图描述的设置,它就是这样.

3.将Assetic指向与symfony 2.0.11一起使用的最新版本

像这样编辑deps文件:

[assetic]
    git=http://github.com/kriswallsmith/assetic.git
    ;version=v1.0.2
    version=ac71449e46bed22c276da26bf54ab2f733b3801d
[AsseticBundle]
    git=http://github.com/symfony/AsseticBundle.git
    target=/bundles/Symfony/Bundle/AsseticBundle
    ;version=v1.0.1
    version=da4a46ce37557dcf3068b8493b12bdbbe47455e2
Run Code Online (Sandbox Code Playgroud)

/!\你还需要删除deps.lock文件中对特定版本的引用!

并发出"php bin/vendors install".

4.更改config.yml

这就是我现在的样子:

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    # java: /usr/bin/java
    filters:
        compass:
            bin: e:\outils\Ruby193\bin\compass.bat
Run Code Online (Sandbox Code Playgroud)

5.在compass.bat/sass.bat中使用绝对路径

转到你的Ruby193\bin目录并编辑compass.bat来设置ruby.exe的绝对路径(当你在它的时候用sass.bat做同样的事情)

6.在模板中更改呼叫

这就是我现在的样子:

{% stylesheets filter='compass' output='css/*.css'
        '@LndBimBundle/Resources/public/css/main.scss'
    %}
        <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
    {% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)

测试:

对于测试,您可以使用

php app/console assetic:dump --verbose --no-debug
Run Code Online (Sandbox Code Playgroud)

这样,如果你像我一样进入无限循环,你可以只使用ctrl + C,这使得测试方式比在浏览器中更有效

/!\你绝对需要使用--no-debug,否则你的css中会出现一堆不需要的行,如下所示:

@media -sass-debug-info{filename{font-family:file\:\/\/C\:\/Users\/Mattso\/AppData\/Local\/Temp\/ass9DBF\.tmp\.scss}line{font-family:\0000359}}
Run Code Online (Sandbox Code Playgroud)

您可以使用

die($this->commandline);
Run Code Online (Sandbox Code Playgroud)

在run方法中

vendor\assetic\src\Assetic\Util\Process.php
Run Code Online (Sandbox Code Playgroud)

显示当前命令行,并测试它.

我的目前看起来像这样:

cmd /V:ON /E:ON /C ""e:\outils\Ruby193\bin\compass.bat" "compile" "C:\Users\Mattso\AppData\Local\Temp" "--config" "C:\Users\Mattso\AppData\Local\Temp\ass59BB.tmp" "--sass-dir" "" "--css-dir" "" "C:\Users\Mattso\AppData\Local\Temp\ass59BC.tmp.scss""
Run Code Online (Sandbox Code Playgroud)

然后你只需要在你的cli中输入"php app/console assetic:dump --no-debug"来创建web\css中的css文件并刷新你网站的页面.等等......瞧!(希望!)

注意:您可能已经注意到,我正在使用CompassFilter而不是SassFilter.那是因为它做了同样的事情(甚至更多),实际上可以做到我们对它的期望.如果有人能找到如何修复SassFilter,那就会膨胀.与此同时,我已经花了太多时间在这上面.

我一直在疯狂地拉我的头发好几天,我希望这篇文章对其他人的心理健康有帮助;)

lee*_*eek 2

请参阅我对问题How to use SCSS filter in Symfony2 under Windows? 的回答:/sf/answers/676088731/

这是对我尝试让 Assetic 在 Windows 上运行所花费的时间的相当全面的报道。


根据您的示例- 您不需要添加cssrewrite过滤器。以下是我如何使用 Twig 中的 Compass:

{% stylesheets filter='compass' output='css/compiled/*.css' 'css/example.scss' %}
    <link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud)