【问题标题】:gulp-autoprefixer with gulp-sass not creating prefixersgulp-sass 的 gulp-autoprefixer 不创建前缀
【发布时间】:2015-07-17 19:54:16
【问题描述】:

那么 gulp 自动前缀是如何工作的呢?

我的理解是这样的:

transition: max-height 1s ease-in-out; 

应该变成这个

transition: max-height 1s ease-in-out;
-moz-transition: max-height 1s ease-in-out;
-webkit-transition: max-height 1s ease-in-out;

这是我的代码:

var sass    = require('gulp-sass');
var concat  = require('gulp-concat');
var rename  = require('gulp-rename');
var autoprefixer = require('gulp-autoprefixer');

gulp.task('styles', function() {
  gulp.src('sass/**/*.scss')
    .pipe(autoprefixer('last 2 version'))
    .pipe(sass({ style: 'expanded' }))
    .on("error", handleError)
    .pipe(concat('style.css'))
    .pipe(gulp.dest('./'));
});

我尝试在 sass 前后移动自动前缀,但没有收到预期的输出。

【问题讨论】:

  • 是否有任何额外的配置代码可用于被省略的 sass 和 autoprefixer 任务? (自动前缀肯定应该在 sass btw 之后)
  • 似乎将它移到 sass 下确实修复了它。多奇怪。再次感谢您的帮助!
  • 你实际得到的输出是什么?

标签: gulp gulp-sass


【解决方案1】:

Sass 是一个预处理器,autoprexifer 是一个后处理器。但是,您的 gulpfile 正在使用预处理器之前预处理器。因此,您只需更改顺序:

var sass         = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');

gulp.task('styles', function() {
  return gulp.src('sass/**/*.scss')
    .pipe(sass({ style: 'expanded' }))
    .pipe(autoprefixer('last 2 version'))
    .pipe(gulp.dest(''))
    .on("error", handleError);
});

请注意,我删除了 concat 管道,因为 Sass 编译器实际上会为您执行此操作。只需确保您在 main.scss 文件(没有前导下划线)中使用 @import "foo_partial" 并且您的部分文件名具有前导下划线。如果这令人困惑,请查看快速文档here

还请注意,我添加了一个return 语句,因为这有助于让 Gulp 能够判断任务何时完成。

预处理器与后处理器

gulp 中的 Sass 操作将任何部分导入连接到一个文件中,然后将代码编译为有效的 CSS。所以以前的 Sass 代码现在是 CSS。因此它被称为预处理器,因为它在代码成为 CSS 之前就完成了它的工作。

另一方面,Autoprefixer 适用于 CSS,而不是 Sass 代码,因此它需要在 Sass 代码已经转换为 CSS 之后使用。这就是为什么它被称为后处理器,因为它在代码是 CSS 之后做它的事情。

【讨论】:

  • 首先非常感谢您,您的帖子非常清晰,但我收到此错误您知道为什么吗? “错误:EEXIST,mkdir”
  • 我编辑让它输出到一个目录,而不是像我有它的一个 css 文件。看看这是否有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 2017-09-14
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多