【问题标题】:Gulp Autoprefixer Not WorkingGulp 自动前缀不工作
【发布时间】:2015-03-20 09:04:42
【问题描述】:

我无法让 Autoprefixer 与 Gulp 一起使用。我在我的 CSS、渐变和变换中使用了不透明度,并且没有显示任何供应商前缀。否则,其他一切都正常。

这是我的 gulp 文件:

var gulp = require('gulp');

var lr = require('tiny-lr');
var jshint = require('gulp-jshint');
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');
var minifycss = require('gulp-minify-css');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var livereload = require('gulp-livereload');
var server = lr();
var plumber = require('gulp-plumber');

var onError = function (err) {  
  gutil.beep();
  console.log(err);
};

gulp.task('lint', function() {
    return gulp.src('js/all.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'));
});

gulp.task('sass', function() {
    return gulp.src('scss/*.scss')
        .pipe(sass({errLogToConsole: true}))
        .pipe(autoprefixer('last 2 versions', 'safari 5', 'ie6', 'ie7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
        .pipe(minifycss())
        .pipe(gulp.dest(''))
        .pipe(plumber({
            errorHandler: onError
        }))
        .pipe(livereload(server));
});


gulp.task('scripts', function() {
    return gulp.src(['js/fittext.js', 'js/fitvids.js', 'js/snap-scroll.js', 'js/cycle-min.js', 'js/all.js', 'js/respond.js'])
        .pipe(concat('all.js'))
        .pipe(gulp.dest('js/min'))
        .pipe(rename('main.min.js'))
        .pipe(gulp.dest('js/min'))
        .pipe(plumber({
            errorHandler: onError
        }))
        .pipe(livereload(server));
});

gulp.task('watch', function() {
    livereload.listen();
    gulp.watch('**/*.php').on('change', livereload.changed);
    gulp.watch('js/*.js', ['scripts']);
    gulp.watch('scss/**/*.scss', ['sass']);  
});

gulp.task('default', ['lint', 'sass', 'scripts', 'watch']);
  • 我已经搜索并尝试了各种解决此问题的方法,但均无济于事。我还尝试将.pipe(gulp.dest('')) 更改为特定目录(如this answer suggested),但没有任何运气。

感谢您提供的任何帮助。

* 更新 *

我想指出我对 Autoprefixer 添加不透明度前缀的天真,而它显然没有。

【问题讨论】:

    标签: css sass gulp autoprefixer


    【解决方案1】:

    这个 gulp 文件:

    var gulp = require('gulp');
    var sass = require('gulp-sass');
    var prefix = require('gulp-autoprefixer');
    var minify = require('gulp-minify-css');
    var plumber = require('gulp-plumber');
    
    function onError(err) {
        console.log(err);
    }
    
    gulp.task('sass', function(){
        return gulp.src('src/style.scss')
            .pipe(sass())
            .pipe(prefix('last 2 versions'))
            .pipe(minify())
            .pipe(gulp.dest('css/'))
            .pipe(plumber({
                errorHandler: onError
            }))
    });
    

    有了这个scss:

    body {
        opacity: .5;
        box-sizing: border-box;
        transform: scale(.5);
        display: flex;
    }
    

    产生这个输出:

    body{opacity:.5;box-sizing:border-box;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}
    

    所以,我不确定我在做什么不同,除了我以不同的方式列出我的浏览器。但我假设您已经尝试删除这些等。

    【讨论】:

    • 可能是最好的方法。减少。感谢那。我基本上像你一样从头开始,现在它正在工作。我很感激他。
    • 对我来说不幸的是它不起作用:stackoverflow.com/questions/32710072/….
    • 我没有得到带有 gulp-ruby-sass 的前缀。
    【解决方案2】:

    这应该可以,将浏览器放在一个数组中,而不是作为参数:

    .pipe(autoprefixer({
        overrideBrowserlist: ['last 2 version', 'safari 5', 'ie6', 'ie7', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4']
    })
    

    你可以通过设置它的真或假来添加级联 cascade: false

    【讨论】:

    • 非常感谢您花时间帮助我。我将继续使用数组。
    • 太棒了,就像一个魅力。但是,您应该将ie6ie7 替换为ie 6ie 7,否则您将收到以下错误:BrowserslistError: Unknown browser query
    【解决方案3】:

    我知道不久前有人问过这个问题,但我偶然发现了一个类似的问题。

    这是我的解决方法:

    1. browserlist 条目添加到package.json
    {
    "browserslist": [
        'last 2 versions', 
        'safari 5', 
        'ie6', 
        'ie7', 
        'ie 8',
        'ie 9', 
        'opera 12.1', 
        'ios 6', 
        'android 4'
      ]
    }
    
    1. 安装autoprefixer

    npm i --save-dev autoprefixer

    1. 安装postcss

    npm i --save-dev postcss

    1. gulpfile.js中的管道修改为:
    gulp.task('sass', function() {
        return gulp.src('scss/*.scss')
            .pipe(sass({errLogToConsole: true}))
            .pipe(postcss([autoprefixer()]))
            .pipe(minifycss())
            .pipe(gulp.dest(''))
            .pipe(plumber({
                errorHandler: onError
            }))
            .pipe(livereload(server));
    });
    

    【讨论】:

    【解决方案4】:

    这应该可行。

    var gulp = require('gulp');
    var autoprefixer = require('gulp-autoprefixer');
    
    gulp.task('styles', function(){
        return gulp.src('css/styles.css')
       .pipe(autoprefixer('last 2 versions'))
       .pipe(gulp.dest ('build'));
    });
    
    gulp.task('watch', function(){
        gulp.watch('css/styles.css', gulp.series(['styles']));
    });
    

    【讨论】:

      【解决方案5】:

      我看到的第一件事是:

      .pipe(autoprefixer('last 2 versions'))
      

      那里的语法有一个小变化:

      .pipe(autoprefixer('last 2 version'))
      

      除此之外,我通过将编译后的 sass 管道传输到目的地然后运行 ​​autoprefixer 取得了成功。

      .pipe(sass())
      .pipe(gulp.dest(''))
      .pipe(autoprefixer())
      

      【讨论】:

      • 感谢您抽出宝贵时间帮助我。我像@donnywals 建议的那样从头开始,现在可以正常工作了。
      • npmjs.com/package/gulp-autoprefixer 在 gulp-autoprefixer 中使用“last 2 versions”是正确的
      • 添加到@bogatyrjov 评论。您的示例中的管道顺序不正确。首先,代码应该自动添加前缀,然后放入解析为.pipe(sass()).pipe(autoprefixer()).pipe(gulp.dest(''))的新目的地。
      猜你喜欢
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      相关资源
      最近更新 更多