10

我无法让 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(''))为特定目录(如建议的这个答案),但没有任何运气。

感谢您提供的任何帮助。

* 更新 *

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

4

5 回答 5

20

这个 gulpfile:

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}

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

于 2015-01-21T19:02:25.753 回答
3

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

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

您可以通过将其设置为 true 或 false 来添加级联 cascade: false

于 2015-01-21T18:24:41.227 回答
2

我知道这个问题是不久前被问到的,但我偶然发现了一个类似的问题。

这是我解决它的方法:

  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));
});
于 2019-10-05T06:14:13.813 回答
0

这应该有效。

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']));
});
于 2019-10-04T11:21:17.960 回答
-1

我看到的第一件事是:

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

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

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

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

.pipe(sass())
.pipe(gulp.dest(''))
.pipe(autoprefixer())
于 2015-01-21T18:28:03.870 回答