【问题标题】:Gulp can't seem to find compass mixinsGulp 似乎找不到 compass mixin
【发布时间】:2014-09-04 22:11:01
【问题描述】:

我正在尝试将 gulp 作为 Grunt 的替代构建工具,将我的 scss 编译为 css,因为我听说它可以更快。

我什至在对我的 scss 文件进行基本编译时都遇到了问题。我曾尝试使用 gulp-sassgulp-ruby-sassgulp-compass 插件进行 gulp,但我得到了几乎相同的错误每次留言:

error screen.scss (Line 2 of _grid.scss: Undefined mixin 'box-sizing'.)

所以看起来它一碰到指南针 mixin 就会掉下来。我的电脑上安装了 ruby​​,compass 版本为 1.0.0.alpha.19 和 sass 版本为 3.3.7。

这是我的 gulpfile:

var gulp = require('gulp'),
compass = require('gulp-compass'),
sass = require('gulp-ruby-sass');

gulp.task('compass', function() {
gulp.src('../sass/UK/screen.scss')
.pipe(compass({
    css: '../css',
    sass: '../sass',
  sourcemap: true,
  style: 'compressed'
}))
.pipe(gulp.dest('../css/UK/screen.css'));
});

gulp.task('sass', function () {
  gulp.src('../sass/UK/**/*.scss')
      .pipe(sass({ style: 'compressed', sourcemap: true }))
      .pipe(gulp.dest('../css/UK'));
});

我知道如何告诉它我的指南针副本安装在哪里吗?我以为它是全局安装的。

【问题讨论】:

  • 我的 _base.scss 文件中有以下几行:@import "compass/reset"; @import "compass/css3";在出现问题的 _grid.scss 文件之前被调用到我的 screen.scss(编译为 screen.css 的那个)中,所以我不认为是这样。
  • @import compass/css3 应该包含 box-sizing mixin,所以还有其他问题。尝试将 gulp 排除在外,然后通过 Compass 进行编译。从那里,缩小您的 Sass 文件的哪些部分缺少 mixin。
  • 嗨,Katie,尝试使用 sass screen.scss screen.css 用 gulp 编译 sass,但出现错误:Syntax error: File to import not found or unreadable: compass/reset.。所以看起来 compass/sass 不是 gulp 的问题。

标签: sass gulp compass-sass gulp-sass


【解决方案1】:

将 Compass 与 Gulp 一起使用会有些混乱。共有三个 gulp 扩展:gulp-ruby-sassgulp-compassgulp-sass。他们基本上做同样的事情。他们将 SASS 编译为 CSS。但是:

  • gulp-ruby-sass:是命令行工具的包装器:sass,语言自带。它是用 Ruby 编写的,它是 installed via gem - Ruby 的包管理器。

  • gulp-compass:是命令行工具的包装器:compassCompass 框架附带。它是用 Ruby 编写的,也是installed via gem。然而,Compass 只是一个框架。它仅包含 SASS 文件。 compass 命令所做的只是将框架 SASS 文件的路径设置为 sass 命令,以便解析 Compass 依赖项。

  • gulp-sass:是一个包装工具:node-sass,它是 Node.JS 绑定到 libsass:Sass 编译器的 C/C++ 实现。

由于我使用的是 gulp-sass,因此上述答案对我不起作用。它看不到开箱即用的 Compass 文件。所以首先我安装了compass-mixins(指南针框架的SASS文件),后来我用compass-importer导入它们:

import compass from 'compass-importer';
import sass from 'gulp-sass';

gulp.task('styles', function () {
  return gulp.src(config.styles.src)
    .pipe(sass({
      importer: compass
    })
    .pipe(gulp.dest(config.styles.dest))
})

【讨论】:

  • 你能解释一下吗?这段代码写在哪里 - 在 gulpfile.js 中?我有属于您描述的类别的确切问题,但我不知道如何使用compass-mixins。我正在使用来自this resourcegulp-saas 部分。
  • 好的,我想通了,我必须在我的 .scss(saas 源文件)中使用@import "compass"; 作为第一行,然后一切都到位了。在此处记录以防万一它可以帮助遇到类似问题的任何人。
【解决方案2】:

你说得对,compass 应该在你的系统上全局安装才能完成这项工作,至少很容易。我建议你卸载 sass 和 compass 以使用

gem uninstall sass && gem uninstall compass

然后重新安装它们:

gem install sass
gem install compass --pre

然后你可以像这样定义一个 gulp 任务

gulp.task('compass', function () {

  return gulp.src('../sass/UK/screen.scss')
    .pipe(sass({ compass: true, sourcemap: true, style: 'compressed' }))
    .pipe(gulp.dest('../css/UK/screen.css'));

});

【讨论】:

  • 这正是我在安装 compass 和 sass 时所做的(我不需要单独安装 sass,因为它是作为 compass 的依赖项安装的)。现在,如果我在安装它的 c: 驱动器上的任何位置执行compass -vsass -v,它会返回版本号,所以它是别的东西。
  • gem install compass 的选项--pre 真的很重要,你做到了吗?
  • 是的gem install compass --pre,正如你所说。我安装了指南针版本 1.0.0.alpha.19 并安装了 sass 3.3.7 作为该指南针安装的依赖项。
  • 哈,我太傻了。我添加了 compass: true 并且效果很好。感谢您对 Aperçu 的帮助。
  • 它发生了,不要怪你,很高兴有帮助! :)
【解决方案3】:

请注意,gulp-ruby-sass 有一个新语法,应该如下所示:

gulp.task('compass', function () 
  sass(../sass/UK/screen.scss, { compass: true, sourcemap: true, style: 'compressed' })
  .pipe(gulp.dest('../css/UK/screen.css'));
});

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    相关资源
    最近更新 更多