Compass / SASS - 并非所有文件都已编译

时间:2014-05-15 13:57:51

标签: sass compass-sass

我不知道如果不粘贴所有文件的全部代码就可以解释这个问题,但我会尝试。

编辑我已将整个代码添加到Github帐户 - My Sass structure

我使用Windows 8.1和Compass 0.12.6

在我的public_html文件夹中,我有config.rb文件和stylesheets文件夹。在stylesheets文件夹中,我有目录sass,我保存所有sass文件。 CSS文件生成到样式表/预览文件夹(用于开发目的)和样式表文件夹(用于生产目的)。

我运行罗盘观看我在public_html文件夹中运行的watch.bat脚本

watch.bat的内容是:

START compass watch -c config.rb -e development
START compass watch -c config.rb -e production
EXIT

我的config.rb文件是:

require 'compass/import-once/activate'
# Require any additional compass plugins here.

# Set this to the root of your project when deployed:
http_path = "../"

sass_dir = "stylesheets/sass"
images_dir = "img"
javascripts_dir = "js"
cache = false
relative_assets = true


add_import_path "stylesheets/sass"


if environment == :development
    css_dir = "stylesheets/preview"
    line_comments = true
    output_style = :nested
end

if environment == :production
    css_dir = "stylesheets"
    line_comments = false
    output_style = :compressed
end 

在stylsheets / sass中我有4个文件print.scss,medium.scss,small.scss和large.scss

medium.scss和large.scss都以:

开头
@import "base/_init";

此文件从基础文件夹导入部分_init,这个加载另一个部分,其他部分加载另一个部分。

问题是当我改变部分内容时,Compass并不总是编译所有必要的输出文件。例如,我刚刚在_settings.scss中更改了部分内容,而这一个最终由medium.scss和large.scss加载(我提醒那两个文件具有相同的开头,因此它们都应该被编译)。实际上只有media.scss文件被监视,而big.scss文件没有被编译,因为在这种情况下它应该是。

我之前遇到过这样的情况。我停止了2个观察者(CTRL + C和Y)然后再次运行我的watch.bat没有更改文件中的任何内容 - 运行后我有信息:

  
    
      
        

在15:51:33检测到的更改为:large.scss覆盖样式表/ preview / large.css         指南针正在轮询更改。按Ctrl-C停止。

      
    
  

  
    
      
        

在15:51:33检测到的更改为:large.scss覆盖stylesheets / large.css         指南针正在轮询更改。按Ctrl-C停止。

      
    
  

所以事实上应该看到有变化,但不知何故罗盘/萨斯并不总能抓住它。

有时2名观察者都没有接受更改,我必须停止更改并再次运行watch.bat,因此以这种方式工作并不是很方便。

有时甚至会发生观察者被停止的事情(因为我提出了CTRL + C + y)但是我没有按任何东西而且在cmd中毫无疑问关闭可见。他们刚刚停止了

问题:可能出现什么问题以及如何解决?

2 个答案:

答案 0 :(得分:4)

我克隆并检查了您的项目结构,您的问题只是不必要地使用Import Once插件。如果您注释config.rb的第一行(激活此插件),您的样式表将正常编译。您拥有的每个主要scss文件(large.css,medium.css,small.css)都会呈现为一个单独的css文件,并且您不会为这些文件中的每一个重复导入。

以下是禁用了导入一次插件的导入序列:

enter image description here

答案 1 :(得分:0)

我不知道如何解决你的问题。

我认为基本上这是一个错误或问题,两个罗盘实例同时在同一个文件夹上运行。

但是由于你的环境,我有一个建议可以帮你解决问题。

为什么,而不是有两个资产的文件夹,一个用于prod。和dev。,你只保留一个,对于两个开发者。和刺激。

您可以在罗盘上设置的是以您想要的方式输出css。然后将该css通过yui过滤器(或其他任何东西)传递给prod。这将缩小所有资产。如果您使用的是symfony,则可以使用资产。 这就是我们做事和完美的方式。我们不使用资产来指南针......这是另一个话题:D

如果您不使用任何框架或额外的过滤器,那么当这些资产准备好生产时,您可以手动转储资产。

这样您就可以避免同时使用两个罗盘实例,也可以为生产中的每个部署手动编译。

我真的认为这与两个指南针运行实例有关。