Измените файл на месте (тот же dest) с помощью Gulp.Яш и подстановка шаблона



у меня есть задача глотка, которая пытается преобразовать .СКС файлы .css-файлы (с помощью gulp-ruby-sass), а затем поместите полученный результат .css файл в том же месте, где он нашел исходный файл. Проблема, поскольку я использую подстановка шаблона, я не обязательно знаю, где хранится файл.



в коде ниже я пытаюсь использовать gulp-tap, чтобы подключиться к потоку и выяснить путь к файлу текущего файла поток был прочитан от кого:



gulp.task('convertSass', function() {
var fileLocation = "";
gulp.src("sass/**/*.scss")
.pipe(sass())
.pipe(tap(function(file,t){
fileLocation = path.dirname(file.path);
console.log(fileLocation);
}))
.pipe(gulp.dest(fileLocation));
});


на основе вывода console.log(fileLocation) этот код, кажется, что это должно работать нормально. Тем не менее, результирующие файлы CSS, похоже, размещены на один каталог выше, чем я ожидаю. Где он должен быть!--2-->, результирующий путь к файлу просто project/partials.



если есть гораздо более простой способ сделать это, я бы определенно оценил это решение еще больше. Спасибо!

639   4  

4 ответов:

как вы и подозревали, вы делаете это слишком сложно. Назначение не должно быть динамическим, так как глобированный путь используется для dest Как хорошо. Просто трубы в той же директории, что ты подстановка КГД от, в этом случае "Сасс":

gulp.src("sass/**/*.scss")
  .pipe(sass())
  .pipe(gulp.dest("sass"));

Если ваши файлы не имеют общей базы, и вам нужно передать массив путей, этого уже недостаточно. В этом случае вы хотите указать базовую опцию.

var paths = [
  "sass/**/*.scss", 
  "vendor/sass/**/*.scss"
];
gulp.src(paths, {base: "./"})
  .pipe(sass())
  .pipe(gulp.dest("./"));

это проще, чем numbers1311407 привело. Вам не нужно указывать папку назначения вообще, просто используйте .. Кроме того, обязательно установите директорию.

gulp.src("sass/**/*.scss", { base: "./" })
    .pipe(sass())
    .pipe(gulp.dest("."));
gulp.src("sass/**/*.scss")
  .pipe(sass())
  .pipe(gulp.dest(function(file) {
    return file.base;
  }));

первоначально ответ дан здесь:https://stackoverflow.com/a/29817916/3834540.

Я знаю, что эта тема старая, но она все еще отображается как первый результат в google, поэтому я подумал, что могу также опубликовать ссылку здесь.

Это было очень полезно!

gulp.task("default", function(){

    //sass
    gulp.watch([srcPath + '.scss', '!'+ srcPath +'min.scss']).on("change", function(file) {
         console.log("Compiling SASS File: " + file.path)
         return gulp.src(file.path, { base: "./" })
        .pipe(sass({style: 'compressed'}))
        .pipe(rename({suffix: '.min'}))
        .pipe(sourcemaps.init())
        .pipe(autoprefixer({
            browsers: ['last 2 versions'],
            cascade: false
        }))
        .pipe(sourcemaps.write('./'))         
        .pipe(gulp.dest(".")); 
    });

    //scripts
    gulp.watch([srcPath + '.js','!'+ srcPath + 'min.js']).on("change", function(file) {
        console.log("Compiling JS File: " + file.path)
        gulp.src(file.path, { base: "./" })
        .pipe(uglify())
        .pipe(rename({suffix: '.min'}))       
        .pipe(gulp.dest(".")); 
    });
})

Comments

    Ничего не найдено.