罗盘:您必须从项目目录编译单独的样式表。

25

不久前,我在一个项目中使用compass从sass生成样式表。

最近我回到那个项目。我进入了我的sass目录,执行了"compass watch --debug .:."命令,但出现了错误:"必须从项目目录中编译单独的样式表"。

我发现该目录中没有config.rb文件,所以我重新创建了一个。它看起来像这样:

http_path = "/"
css_dir = "/css"
sass_dir = "/css"
images_dir = "/img"
javascripts_dir = "/js"
preferred_syntax = :sass

然而,无论我在配置中输入什么值,所有尝试使用指南针的尝试都会导致相同的错误。

我该如何让指南针真正处理我的Sass文件?

6个回答

41

我也遇到了这个问题,并且Arnaud Valle在评论中已经回答了它。

但为了更清晰,给以后搜索的人一些提示。

仅仅创建一个config.rb是无法工作的,因为compass不会识别它。

答案就是切换到你的项目目录(根目录)然后运行

compass init

这将为您创建一个“工作”的config.rb文件,并创建两个名为sass和stylesheets的目录,在sass目录中将有一些起始scss文件。

如果您不想要它们,或者想要使用不同的目录,现在您可以编辑刚刚创建并工作的config.rb,并更改您的目录(然后删除旧的自动创建的目录)

哦,我怀疑您的js文件夹不会在javascripts文件夹中,因此请在config.rb中进行编辑

无论如何,完成这些步骤(或没有完成),您应该能够运行

compass watch

一切都应该没问题,也就是说你的 SCSS 文件会被编译成 CSS 文件。

作为一种我尚未尝试但从理论上来说可行的替代方法

compass compile [path/to/scss]

如果您不想初始化指南针,则应该也可以使用。有关指南针的更多信息,请查看此处的文档。

如果您经常使用这种操作,并且不喜欢默认设置,那么可以编辑/添加以下内容到您的~/.bash_profile文件中,以完全实现。

alias compass_init="compass init --syntax=sass --css-dir=css --javascripts-dir=js"

4

移除您的目录名称前面的“/”。

当您的源路径不正确时,会出现此错误。在您的情况下,您的目录中有额外的“/”。删除它们应该可以解决问题。

正如其他人所说,使用compass init创建一个config.rb也可以解决问题。

请注意,在使用Grunt或类似的运行器运行compass时,config.rb并非必需品。这可能是您的项目之前在没有config.rb文件的情况下运行的方式。运行器使用Gruntfile.js中的所有路径和选项启动compass。在Gruntfile和config.rb中具有路径/选项可能会导致问题。


4

我通常将我的config.rb放在项目目录(或根目录)而不是sass目录中。

文件夹结构应该像这样:

  • config.rb
  • --- css
  • --- sass

同时,你的css_dir和sass_dir具有相同的值,这也可能导致你的问题。


我已经重新创建了我的项目和配置以反映这些更改。但是我仍然遇到了这个错误。我希望Compass团队能够看到这篇文章并意识到需要改进他们的文档。 - davedave
非常奇怪 - 我从来没有遇到过像这样的指南针问题。也许最好从头开始,在您的文件夹上执行“compass init”,以确保您从干净的状态开始。 - Arnaud Valle

0
对于任何想要编译 SCSS 而不需要制作整个项目(例如,为单独的页面),您只需创建一个 config.rb 即可,但它需要至少两个参数:css_dir 和 sass_dir。(仅仅触摸它是不够的)。一个最小的 config.rb 如下:
css_dir='.';sass_dir='.'

这实际上创建了一个指南针项目,用于编译简单的文件。如果您想使用精灵等其他参数,您将不得不包括其余的参数。假设指南针可以写入目录,它将在您第一次运行compass compilecompass watch时创建.sass-cache目录。

还要注意,必须从具有config.rb的目录运行指南针命令,否则您将会收到此错误。

最后,如果您只想利用简单的SASS功能(而不是指南针框架组件),直接使用SASS通常更简单:

sass --watch foo.scss:foo.css


0

在Windows 7上使用Symfony和Gulp时遇到了这个问题,我通过使用绝对路径解决了它,像这样:

gulp.task('compass', function() {
gulp.src('c:/wamp/www/mnv/src/Mnv/Bundle/MnvBundle/Resources/public/sass/*.scss')
    .pipe(compass({
        config_file: 'c:/wamp/www/mnv/src/Mnv/Bundle/MnvBundle/Resources/public/config.rb',
        css: 'c:/wamp/www/mnv/src/Mnv/Bundle/MnvBundle/Resources/public/stylesheets',
        sass: 'c:/wamp/www/mnv/src/Mnv/Bundle/MnvBundle/Resources/public/sass'
    }))
    .pipe(gulp.dest('c:/wamp/www/mnv/web/css'));
 });

0

我在使用gulp-compass-compile时遇到了同样的问题。通过将compass函数的srcDir选项(转换为--sass-dir选项)从./src/scss更改为src/scss来解决了这个问题。希望能对某些人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接