В эти выходные я начал играть с gulp. Я хотел создать задачу, которая может
- скомпилируйте мои sass файлы
- продолжайте работать, если я ошибаюсь в файле sass
- работа с sass Bootstrap
- генерировать исходные файлы
- добавить префиксы для браузера
- вставить скомпилированный css wihtout browser reload
- быстрый (1-2 с вершины в dev env)
Я получил большинство шагов, но префиксы браузера дали мне трудное время Вот что я получил до сих пор
var browserSync = require('browser-sync');
var reload = browserSync.reload;
var filter = require('gulp-filter');
var gulp = require('gulp');
var sass = require('gulp-sass');
var autoprefixer = require('gulp-autoprefixer');
var notify = require("gulp-notify");
var sourcemaps = require('gulp-sourcemaps');
var concat = require('gulp-concat');
var config = {
sassPath: './sass',
bower: './bower_components',
bootstrap: './bower_components/bootstrap-sass-official/assets/stylesheets',
fonts: './bower_components/bootstrap-sass-official/assets/fonts'
};
gulp.task('sass', function () {
return gulp.src(config.sassPath + '/**/*.scss')
.pipe(sourcemaps.init())
.pipe(sass({
//outputStyle: 'compressed',
outputStyle: 'nested',
precision: 10,
includePaths: [
config.sassPath,
config.bower,
config.bootstrap
],
onError: function (err) {
notify().write(err);
}
}))
.pipe(concat('app.css'))
.pipe(autoprefixer('last 2 version'))
.pipe(sourcemaps.write())
.pipe(gulp.dest('css'))
.pipe(filter('**/*.css')) // Filtering stream to only css files
.pipe(browserSync.reload({stream:true}));
});
gulp.task('browser-sync', function() {
browserSync({
logLevel: "info",
server: {
baseDir: './',
//directory: true,
routes: {
"/fonts": config.fonts
}
}
});
});
gulp.task('default', ['sass', 'browser-sync'], function () {
gulp.watch(['./**/*.html', 'js/**/*.js'], reload);
gulp.watch('sass/*.scss',['sass']);
});
Проблема заключается в том, что autoprefixer дает мне ошибку и помешает исходным файлам
Ошибка, которую я получаю: "gulp -sourcemap-write: исходный файл не найден: C:\WEB\skilldrill_v1\skilldrill\sass\app.css"
Поэтому по какой-то причине он пытается найти файлы css в sass dir
[Изменить]
Мне удалось найти проблему, но она не смогла ее решить.
Труба эта вещь работает: gulp -autoprefixer → сделать некоторые вещи → задачи префикса → vinyl-sourcemaps-apply
В 35-й строке gulp -autoprefixer\index.js: applySourceMap (файл, res.map.toString()); С этого момента винил-sourmaps-apply понимает, что текущий файл (в моем случае app.css) также становится источником.
Вот проблемы: a) он считает, что файл css находится в той же папке, что указан в gulp.src(), которая обычно неверна b) он не работает только с строками, добавленными автоприемником, но добавляет ссылку на каждую отдельную строку
Есть ли у вас идеи, основанные на этой информации? Я начал копать в gulp -concat, который правильно обрабатывает подобную проблему.