如何让 Assetic + sass 在 Windows 中与 Symfony2 一起工作?

Posted

技术标签:

【中文标题】如何让 Assetic + sass 在 Windows 中与 Symfony2 一起工作?【英文标题】:How to have Assetic + sass work with Symfony2 in Windows? 【发布时间】:2012-03-26 11:22:51 【问题描述】:

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

我已经解决这个问题好几个小时了,据我所知,当前的资产版本 (1.0.2) 搞砸了,无法在 Windows 中工作。

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

这篇帖子symfony2 assetics yui compressor on windows (path syntax) 对这个问题提供了一些很好的见解,但不幸的是,它推荐的对资产库的更改不足以使其在我的环境中正常工作。

我还在https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c 和https://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 存储库 (https://github.com/symfony/symfony/issues/3216) 获取 symfony 时,此问题可能会产生影响。 发出“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 和 kill 你只会看到错误消息脚本在正确的位置!)

现在,情况似乎好一些了,但仍然无法使用 sass(我认为它可以与其他一些过滤器一起使用) 我设法在“$data = fread($pipe, 8192);”处隔离了 Process.php(第 172 行附近)中的问题:脚本第二次通过这个地方,$pipe 指向第二个资源,它永远不会返回......并且 php 卡住并且很难出来(我需要杀死/重新启动 wamp 至少两次才能可以再做一次测试)

我真的不熟悉 proc_open 和流,我很难理解其中的代码试图做什么......

我希望这可以帮助下一个尝试让事情正常进行的人,并最终也帮助我的案子。 仍在寻求有关此事的一些支持!

_____更新:

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

_____更新:

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


演练:

所以,最终我得到了这个工作,并认为我会尝试为以后的观众总结最重要的步骤:

1。安装 Ruby 1.9.3 和 compass 0.12

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

使用

将指南针更新到 0.12
"gem update --system"

然后

"gem install compass"

2。更改指南针中的 compiler.rb

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

self.from, self.to = File.expand_path(from), to

self.from, self.to = from.gsub('./', ''), to

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

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

/!\ 您还需要在 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

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 %

测试:

为了测试,你可以使用

php app/console assetic:dump --verbose --no-debug

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

/!\ 你绝对需要使用--no-debug,否则你的css中会出现一堆不需要的行,看起来像:

@media -sass-debug-infofilenamefont-family:file\:\/\/C\:\/Users\/Mattso\/AppData\/Local\/Temp\/ass9DBF\.tmp\.scsslinefont-family:\0000359

你可以使用

die($this->commandline);

在run方法中

vendor\assetic\src\Assetic\Util\Process.php

显示当前命令行,并对其进行测试。

我的目前看起来像这样:

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""

然后,您只需在 cli 中键入“php app/console assetic:dump --no-debug”即可在 web\css 中创建 css 文件并刷新您网站的页面。等等……瞧! (希望如此!)

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

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

【问题讨论】:

【参考方案1】:

如果有人来这里寻找答案,就像对这个问题的更新(或者对于任何只使用 sass 而不是指南针的人)。现在只需要:

assetic:
    filters:
        cs-s-rewrite: ~
        sass: 
          bin: "<pathtosass>"
          apply_to: "\.scss$"

parameters:
     assetic.ruby.bin: '<pathtoyourrubyhere>'

这是使用 PHP 5.4

【讨论】:

【参考方案2】:

请看我对如何在 Windows 下的 Symfony2 中使用 SCSS 过滤器的问题的回答:https://***.com/a/9658410/3765

它非常全面地介绍了我尝试让 Assetic 在 Windows 上运行所花费的时间。


基于your example - 您不需要添加cs-s-rewrite 过滤器。以下是我如何使用 Twig 中的 Compass:

% stylesheets filter='compass' output='css/compiled/*.css' 'css/example.scss' %
    <link rel="stylesheet" href=" asset_url ">
% endstylesheets %

【讨论】:

#3 一点都不清楚。打算出现哪条线?我目前在 compiler.rb 中有第二个。此外,在 deps 文件中添加提交编号并重新获取供应商,我最终得到了当前的 1.0.2,而不是特定的目标提交。我不得不手动获取它们。最后,在您的帖子中没有任何我不知道的信息,它不允许我进一步了解:/您使用哪个版本的 php?用什么版本的windows?也许这可以有所作为...... @Matt:在#3 中,第二行是要添加的行。我使用 Compass 0.12.rc.1 可以解释这些差异。此外,如果您计划更改 deps 文件中的存储库版本 - 您必须首先删除 deps.lock @Matt: 其他信息 - 我在 Windows 7 x64 上使用 PHP 5.3.10 我有相同的设置,但事情不工作。我实际上在具有 32 位 wamp 的 Windows 7 x64 上运行 php 5.3.10。我的 Ruby\bin 路径位于 windows env PATH 变量中(#1,%ruby%\bin\compass.bat 和 %ruby%\bin\sass.bat 有一个硬编码的 ruby​​.exe 路径(#2),% ruby%\lib\ruby\gems\1.9.1\gems\compass-*\lib\compass\compiler.rb (#3) 没问题(但我真的不需要 compass afaik),并且升级了assetic/AsseticBundle到你建议的提交(#5)。关于#4,我的配置/视图在pastebin.com/n6mWscnY 上可见......知道你的设置和我的设置有什么不同吗?? 您是在 32 位还是 64 位版本中运行 wamp?你的 scss 文件有多大?

以上是关于如何让 Assetic + sass 在 Windows 中与 Symfony2 一起工作?的主要内容,如果未能解决你的问题,请参考以下文章

安装 RVM 后无法加载 Sass / Compass,与 Symfony2 中的 Assetic 一起使用

如何让 Assetic 在 Windows 上的 Zend Framework 上编译 SCSS?

在 Symfony2 中使用 Compass 和 Assetic 的 Foundation5

SASS 没有在 symfony 中编译

Assetic 未创建组合链接

Symfony2 - Assetic - css 字体图标