Gulp Autoprefixer 不工作
Gulp Autoprefixer Not Working
我无法让 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 添加不透明度前缀的天真,这显然不是。
这应该可行,将浏览器放在一个数组中,而不是作为参数:
.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
我首先看到的是:
.pipe(autoprefixer('last 2 versions'))
语法上的一个小改动:
.pipe(autoprefixer('last 2 version'))
除此之外,我通过将已编译的 sass 管道传输到目标然后 运行 autoprefixer 取得了成功。
.pipe(sass())
.pipe(gulp.dest(''))
.pipe(autoprefixer())
这个 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}
所以,除了我列出的浏览器不同之外,我不确定我所做的到底有什么不同。但我假设您已经尝试删除这些等
这应该有效。
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']));
});
我知道不久前有人问过这个问题,但我偶然发现了一个类似的问题。
我是这样解决的:
- 将
browserlist
条目添加到 package.json
:
{
"browserslist": [
'last 2 versions',
'safari 5',
'ie6',
'ie7',
'ie 8',
'ie 9',
'opera 12.1',
'ios 6',
'android 4'
]
}
- 安装
autoprefixer
npm i --save-dev autoprefixer
- 安装
postcss
npm i --save-dev postcss
- 将
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));
});
我无法让 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 添加不透明度前缀的天真,这显然不是。
这应该可行,将浏览器放在一个数组中,而不是作为参数:
.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
我首先看到的是:
.pipe(autoprefixer('last 2 versions'))
语法上的一个小改动:
.pipe(autoprefixer('last 2 version'))
除此之外,我通过将已编译的 sass 管道传输到目标然后 运行 autoprefixer 取得了成功。
.pipe(sass())
.pipe(gulp.dest(''))
.pipe(autoprefixer())
这个 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}
所以,除了我列出的浏览器不同之外,我不确定我所做的到底有什么不同。但我假设您已经尝试删除这些等
这应该有效。
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']));
});
我知道不久前有人问过这个问题,但我偶然发现了一个类似的问题。
我是这样解决的:
- 将
browserlist
条目添加到package.json
:
{
"browserslist": [
'last 2 versions',
'safari 5',
'ie6',
'ie7',
'ie 8',
'ie 9',
'opera 12.1',
'ios 6',
'android 4'
]
}
- 安装
autoprefixer
npm i --save-dev autoprefixer
- 安装
postcss
npm i --save-dev postcss
- 将
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));
});