当相对路径是符号链接时,sass / scss @import

时间:2013-03-28 13:52:52

标签: symfony import sass relative-path symlink

我们在symfony2中遇到来自另一个捆绑包的@import个scss文件时出现问题。

  • 源代码(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文件中,这样我就可以“发现”我是处于“链接模式”还是“复制模式”并制作{{ 1}}使用一个或另一个路径。

任何实现a或b的方法? 这两种策略之间有何偏好? 任何替代战略?

谢谢! 哈维。

1 个答案:

答案 0 :(得分:0)

两种解决方案都是可能的。

  

a)也许我可以配置一些东西,以便PHP看到“相对路径而不重新映射符号链接”。

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

  

b)也许我可以将参数.ini或类似的“变量”传递到.scss文件中,这样我就可以“发现”我是否处于“链接模式”或“复制模式”并制作@import使用一条路径或另一条路径。

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

有关这两者的详细信息,请参阅Compass: Importing files from another project directory