Sass Compass:从其他项目目录导入文件

Sass Compass:从其他项目目录导入文件,sass,compass-sass,Sass,Compass Sass,我有两个项目。一个是为我们的网站面向公众的一面,另一个是为管理方面。我有一个在两页上都相同的页面 我的目录结构如下: /public config.rb /images /upgrade /sprites /sass /upgrade index.scss /stylesheets /cms config.rb /sass /upgrade index.scss /stylesheets publ

我有两个项目。一个是为我们的网站面向公众的一面,另一个是为管理方面。我有一个在两页上都相同的页面

我的目录结构如下:

/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
中,精灵PNG的导入如下所示

@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
这很有意义,因为当我编译我的
cms/sass/upgrade/index.scss
时,它会在没有图像的
cms/images/upgrade/sprites
中查找图像


我很想知道是否有人遇到过这个问题,并且有任何解决方案如何在项目之间共享资产。我认为设置
relative\u assets=true
会有所帮助,但事实并非如此。也许我用错了。我不知道。

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

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

  • 符号链接的放置位置、指向的位置、尝试编译时出现的错误
  • 更详细的项目结构(所涉及文件的完整内容将有所帮助)
  • UPD:确保您的Apache配置已启用,并且PHP配置中包含所有项目目录

    如果你放弃它,你可以使用我刚刚发明的讨厌的黑客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\u 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};
    

    你可以让
    images\u dir
    指向你想要的任何地方,包括项目目录之外。我需要images\u dir指向它们各自的项目图像目录。这只是一种情况,我需要从这两个位置加载图像。为图像创建符号链接有效吗?我尝试了,但没有成功。请查看我的答案,如果它符合您的需要,请接受。