1

我有两个项目。一个用于我们网站的面向公众的一侧,另一个用于管理员一侧。我在两个页面上都有一个相同的页面。

我的目录结构是这样的:

/public
  config.rb
  /images
    /upgrade
      /sprites
  /sass
    /upgrade
        index.scss
  /stylesheets

/cms
  config.rb
  /sass
    /upgrade
        index.scss
  /stylesheets

public/sass/upgrade/index.scss是所有风格都存在的地方。cms/sass/upgrade/index.scss导入这些样式,如下所示:

@import '../../../public/sass/upgrade'

这些工作正常,因为我可以将 css 生成到cms/stylesheets/upgrade/index.css. 我遇到问题的是精灵生成。在内部public/sass/upgrade/index.scss,精灵 pngs 的导入看起来像这样

@import 'upgrade/sprites/*.png';

使用 LiveReload,我收到以下错误:

Cannot determine the opposite position of: to
Cannot determine the opposite position of: to
Cannot determine the opposite position of: to
No files were found in the load path matching "setup/packages/*.png". Your current load paths are: ./images

这是有道理的,因为当我编译 my 时,它会在没有cms/sass/upgrade/index.scss图像的地方寻找图像。cms/images/upgrade/sprites

我很想知道是否有人遇到过这个问题并且有任何解决方案如何跨项目共享资产。我认为该设置relative_assets = true会有所帮助,但没有。也许我用错了。我不知道。

4

1 回答 1

2

我确信 cimmanon 创建符号链接的建议应该有效。你确定你做对了吗?为了安全起见,请使用绝对路径。

你的项目结构有点有趣,我没能完全理解它,所以我不能给你确切的符号链接位置和目标。如果您希望我们为您提供确切的路径,请更新您的问题:

  1. 您放置符号链接的位置,它指向的位置,尝试编译时遇到的错误;
  2. 更详细的项目结构(所涉及文件的全部内容会有所帮助)。

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

如果你放弃它,你可以使用我刚刚发明的一个讨厌的 hack。:D

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

public/config.rb中,添加:

# Assign a name to the project and pass it into SASS
$project_name = "public"
module Sass::Script::Functions
  def project_name
    Sass::Script::String.new($project_name)
  end
end

的添加cms/config.rb非常相似。唯一的区别是 $project_name 的值:

# Assign a name to the project and pass it into SASS
$project_name = "cms"
module Sass::Script::Functions
  def project_name
    Sass::Script::String.new($project_name)
  end
end

之后,修改导入行public/sass/upgrade/index.scss

@if project-name() == public {
  @import 'upgrade/sprites/*.png';
} @else if project-name() == cms {
  @import '../../../public/upgrade/sprites/*.png';
}

我的示例中的导入路径是弯曲的,请调整它们以匹配您的环境。

UPD2:@import指令不允许在控制指令中,如@if. 因此,您可以使用:

@if project-name() == public {
  $path: 'upgrade/sprites/*.png';
} @else if project-name() == cms {
  $path: '../../../public/upgrade/sprites/*.png';
}
@import #{$path};
于 2013-03-28T13:36:37.303 回答