我不知道如果不粘贴所有文件的全部代码就可以解释这个问题,但我会尝试。
编辑我已将整个代码添加到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中毫无疑问关闭可见。他们刚刚停止了
问题:可能出现什么问题以及如何解决?
答案 0 :(得分:4)
我克隆并检查了您的项目结构,您的问题只是不必要地使用Import Once插件。如果您注释config.rb的第一行(激活此插件),您的样式表将正常编译。您拥有的每个主要scss文件(large.css,medium.css,small.css)都会呈现为一个单独的css文件,并且您不会为这些文件中的每一个重复导入。
以下是禁用了导入一次插件的导入序列:
答案 1 :(得分:0)
我不知道如何解决你的问题。
我认为基本上这是一个错误或问题,两个罗盘实例同时在同一个文件夹上运行。
但是由于你的环境,我有一个建议可以帮你解决问题。
为什么,而不是有两个资产的文件夹,一个用于prod。和dev。,你只保留一个,对于两个开发者。和刺激。
您可以在罗盘上设置的是以您想要的方式输出css。然后将该css通过yui过滤器(或其他任何东西)传递给prod。这将缩小所有资产。如果您使用的是symfony,则可以使用资产。 这就是我们做事和完美的方式。我们不使用资产来指南针......这是另一个话题:D
如果您不使用任何框架或额外的过滤器,那么当这些资产准备好生产时,您可以手动转储资产。
这样您就可以避免同时使用两个罗盘实例,也可以为生产中的每个部署手动编译。
我真的认为这与两个指南针运行实例有关。