Я пытался заставить gulp sass и gulp sourcemaps делать именно то, что я хочу, и мне это трудно. Я хочу взять входной файл sass (src/sass/index.scss), создать выходной файл (dist/css/index.css) и отдельную исходную карту для этого индексного файла (dist/css/index.css.map) который имеет sourceRoot, установленный на базу проекта (абсолютный путь: /home/damon/projects/test), и записи исходной карты должны быть относительными к этому пути.
Вот что я пробовал:
попытка 1: прямой пример кода из gulp-sass:
var sassEntry = 'src/sass/index.scss';
gulp.src(sassEntry)
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write())
.pipe(gulp.dest('dist/css'));
Результат: это встраивает исходную карту в файл CSS, поэтому я не могу сказать, правильно это или нет.
попытка 2: записать в отдельный файл
gulp.src(sassEntry)
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist/css'));
Результат: пишет отдельный sourcemap, но sourceRoot говорит '/sources/' (WTF это?!, его не существует, и я никогда его не настраивал), и все пути относятся к файлу входа sass, а не к базе проекта , что также будет бессмысленно, когда мой браузер попытается найти исходные файлы.
попытка 3: попытаться исправить исходный корень (также я нашел includeContent: false)
gulp.src(sassEntry)
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: __dirname}))
.pipe(gulp.dest('dist/css'));
Результат: sourceroot теперь является моей рабочей папкой, что хорошо, содержимое не включено, что хорошо, но файлы в sourcemap по-прежнему относятся к файлу записи sass, а не к sourceRoot, поэтому моя карта по-прежнему бесполезна.
попытка 4: установить базу gulp.src
gulp.src(sassEntry, { base: __dirname })
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: __dirname}))
.pipe(gulp.dest('dist/css'));
Результат: К сожалению, установка базы на gulp.src исправляет исходную карту - sourceRoot по-прежнему верен, а пути к исходным файлам относятся к sourceRoot, НО теперь он выводит в dist/css/src/sass/index.css, что неверно. ВТФ!
попытка 5: используйте абсолютные пути
gulp.src(sassEntry, { base: __dirname })
.pipe(sourcemaps.init())
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('.',{includeContent: false, sourceRoot: __dirname}))
.pipe(gulp.dest(__dirname + '/dist/css'));
Итог: никаких изменений, он по-прежнему выводит в ту же глубокую структуру в dist.
Если кто-нибудь может просветить меня о том, как это сделать, я был бы вечно благодарен.