【发布时间】:2014-10-05 13:39:45
【问题描述】:
这个周末我开始玩 gulp。我想设置一个任务,可以
- 编译我的 sass 文件
- 如果我在 sass 文件中出错,请继续工作
- 使用 sass Bootstrap
- 生成源地图
- 附加浏览器前缀
- 在不重新加载浏览器的情况下注入已编译的 css
- 快速(在开发环境中最高 1-2 秒)
我完成了大部分步骤,但浏览器前缀让我很难过 这是我到目前为止得到的结果
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']);
});
问题是自动前缀给了我一个错误并弄乱了源映射
我得到的错误:“gulp-sourcemap-write: source file not found:C:\WEB\skilldrill_v1\skilldrill\sass\app.css”
所以出于某种原因,它试图在 sass 目录中查找 css 文件
[编辑]
我设法找到了问题,但还没有解决。
这个东西工作的管道:gulp-autoprefixer -> 做一些事情 -> 前缀任务 -> 乙烯基-sourcemaps-apply
gulp-autoprefixer\index.js 第35行:applySourceMap(file, res.map.toString()); 从这一点开始,vinyl-sourmaps-apply 理解当前文件(在我的例子中为 app.css)也成为了一个源文件。
以下是问题: a) 它认为 css 文件与 gulp.src() 中指定的文件夹位于同一文件夹中,这通常不是真的 b) 它不仅仅适用于自动前缀添加的行,而是添加对每一行的引用
您对这些信息有什么想法吗?我开始挖掘 gulp-concat 可以正确处理类似问题。
【问题讨论】:
-
我想我在 sourcemaps 和 gulp-autoprefixer 上遇到过类似的问题。我还尝试了一种变通方法,两次运行源映射。我最近发现使用 PostCSS 和 CSSNext 似乎可以解决这个问题。看看here,看看这个解决方案是否对你有用。
标签: gulp-sass autoprefixer gulp-sourcemaps