2014-12-23 2 views
1

Я использовал Grunt некоторое время, и недавно решил попробовать Gulp. Должен сказать, из того, что я видел до сих пор, это выглядит многообещающим. Однако кажется, что в Grunt есть некоторые вещи, которые являются трудными или невозможными в Gulp (как и в случае любых 2 подобных вещей, я полагаю).Gulp Equivalent to Grunt's Files.Rename

Одна из этих вещей - переименование исходных файлов для пункта назначения. Я признаю, что это нишевый случай, но он может быть очень сильным. В моем случае я использую g (r?) U (nt | lp) -sass. У меня есть файлы SCSS в папках с «scss» в имени, и я хочу поместить их в путь с «css» в качестве одной из папок в том же месте на пути, что и папка «scss».

С Грунтом это можно сделать прямо в объекте files, с использованием метода rename. Например:

grunt.initConfig ({ 
    sass: { 
     move: { 
      options: { 
       lineNumbers: true, 
       compass: true, 
       cacheLocation: 'app/.cache/sass' 
      }, 
      files: [{ 
       expand: true, 
       cwd: 'app/modules/', 
       src: '**/*.scss', 
       dest: '', 
       ext: '.css', 
       rename: function (dest, src) { 
        return 'app/modules/' + src.replace ('scss', 'css'); 
        } 
      }] 
     } 
    } 
}); 

require ('load-grunt-tasks')(grunt); 

До сих пор с Глоток, у меня есть:

var gulp = require ('gulp'); 
var sourcemaps = require ('gulp-sourcemaps'); 
var scss = require ('gulp-sass'); 

gulp.task('scss:move', function() { 
    return gulp.src ('app/modules/**/scss/**/*.scss') 
     .pipe(sourcemaps.init()) 
      .pipe (scss()) 
     .pipe (sourcemaps.write()) 
     .pipe(gulp.dest(**?**)); 
}); 

Как преобразовать исходный путь в Глоток для пути назначения, как метод files.rename в Грунта? Я бы предпочел относительно простое решение, как и один метод, но решения, связанные с плагинами Gulp, тоже в порядке.

+0

Вы пытаетесь скопировать файлы в каталог desintation и переименовать их в процессе, оставив исходные папки 'scss' в исходном каталоге? Или вы пытаетесь переместить каталоги 'scss' в каталоги' css' в исходном каталоге? В любом случае, вы хотите сохранить структуру каталогов, но переименовать каталоги 'scss' в' css', правильно? – JMM

+0

Я хочу сохранить папки 'scss' и создать новые папки' css' в том же месте, что и каждая папка 'scss'. Например, если есть файл 'app/scss/app.scss', я хочу создать файл' app/css/app.css' с CSS, скомпилированным из оригинального Sass. – trysis

ответ

2

Итак, вы хотите сохранить структуру каталогов и изменить каталоги с именем scss на css при копировании из источника в пункт назначения, правильно? Если да, то что вы хотите - gulp-rename plugin. Пример:

gulp.task('scss:move', function() { 
    var base = './app/modules'; 

    return gulp.src(base + '/**/scss/**/*.scss') 
    .pipe(rename(function (file) { 
     file.dirname = path.join.apply(path, 
     file.dirname.split(path.sep).map(function (seg) { 
      return seg == 'scss' ? 'css' : seg; 
     })); 
     })) 
    .pipe(gulp.dest(base)); 
}); 

Вы, вероятно, хотите сделать переименование следующего поколением источника карты, в противном случае переименовал путь будет использоваться в качестве исходного пути в исходных картах. В настоящее время в gulp-sass есть ошибка (#158), которая делает невозможным переименование до gulp-sass.

+0

Я смотрел на этот плагин, но казалось, что он заменит файл/папку, а не добавит новый. Я должен был бы лучше узнать из философии Гульпа «Сделай одно и сделать это правильно». – trysis

+1

@trysis Я обновил ответ на основе ваших отзывов о том, куда должен идти выход. Плагин переименовывает виниловые (виртуальные) файлы в памяти, а не файлы на диске. Поэтому в этом случае ваши исходные файлы будут сохранены. – JMM

+0

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