当相对路径为symlink时,Sass /scss @import



我们在symfony2的另一个bundle的scss文件的@import中遇到了问题。

  • 源代码(hg repo)位于机器a的/files/...中。
  • 在devel中,apache从机器A的/var/www/...服务,链接到机器A的/files/...
  • 在生产环境中,apache从机器B的/var/www/...提供服务,其中复制了源文件

让我们关注一个包含着色和大小定义的Layout.scss文件。这些是我的路径:

# Source code (machine A)
xavi@bromo$ cd /files/custom_www/guparty/workspace/guparty/Applications/Common/bundles/LayoutBundle/Resources/public/Sass
xavi@bromo$ ls -l Layout.scss
-rw-rw-r-- 1 xavi xavi 7528 2013-03-28 12:18 Layout.scss
# Devel (machine A)
xavi@bromo$ cd /var/www/guparty/workspace/www/frontend/src/gUparty/
xavi@bromo$ ls -l Common
lrwxrwxrwx 1 xavi xavi 71 2013-03-28 12:26 Common -> /files/custom_www/guparty/workspace/guparty/Applications/Common/bundles
# Production (machine B)
ubuntu@ProductionLarge1$ cd /var/www/www.guparty.com/src/gUparty/
ubuntu@ProductionLarge1$ ls -ld Common/
drwxr-xr-x 21 www-data www-data 4096 2013-03-28 07:35 Common/

现在让我们考虑包含前面文件的文件Test.scss:

# Seen from the source code point of view:
/files/custom_www/guparty/workspace/guparty/Applications/FrontEnd/bundles/TestingBundle/Resources/public/Sass/Test.scss
# Seen from the devel apache point of view (links to the one above):
/var/www/guparty/workspace/www/frontend/src/gUparty/FrontEnd/TestingBundle/Resources/public/Sass/Test.scss
# Seen from the production apache point of view:
/var/www/www.guparty.com/src/gUparty/FrontEnd/TestingBundle/Resources/public/Sass/Test.scss

Test.scss文件以@import指令开头,像这样:

@import "../../../../../../../src/gUparty/Common/LayoutBundle/Resources/public/Sass/Layout.scss";

从包含文件副本的生产机器来看,它工作得很好。

然而,当从开发机运行时,我希望它能工作,因为相对路径是相同的。相反,操作系统不显示链接到apache/php的文件,并且资产"需要知道"真正的路径。

在devel中,导入失败,如果我将@import更改为此,它可以正常工作:

@import "../../../../../../../Applications/Common/bundles/LayoutBundle/Resources/public/Sass/Layout.scss";

我看到的解决方案,但不知道如何实现

a)也许我可以配置一些东西,让PHP看到"不映射符号链接的相对路径"。

b)也许我可以从参数。ini或类似的。scss文件中传递一个"变量",这样我就可以"发现",如果我处于"链接模式"或"复制模式",并使@import使用一个路径或另一个。

有办法实现a或b吗?这两种策略有什么偏好吗?还有别的策略吗?

谢谢!哈维。

两种方法都可行。

a)也许我可以配置一些东西,让PHP看到"不映射符号链接的相对路径"。

确保您的Apache配置已启用FollowSymLinks, PHP配置已在include_path中包含所有项目目录。

b)也许我可以从参数。ini或类似的。scss文件中传递一个"变量",这样我就可以"发现",如果我处于"链接模式"或"复制模式",并使@import使用一个路径或另一个。

创建一个自定义SASS函数,根据调用的项目返回不同的结果。这将允许从public/sass/upgrade/index导入不同的路径。SCSS取决于你正在编译的项目。

参见Compass:从另一个项目目录导入文件以了解两者的详细信息。

最新更新