Подтвердить что ты не робот

Можно ли использовать задачу Gulp с несколькими источниками и несколькими адресами?

У меня есть следующее в моем gulpfile.js:

   var sass_paths = [
        './httpdocs-site1/media/sass/**/*.scss',
        './httpdocs-site2/media/sass/**/*.scss',
        './httpdocs-site3/media/sass/**/*.scss'
    ];

gulp.task('sass', function() {
    return gulp.src(sass_paths)
        .pipe(sass({errLogToConsole: true}))
        .pipe(autoprefixer('last 4 version'))
        .pipe(minifyCSS({keepBreaks:true}))
        .pipe(rename({ suffix: '.min'}))
        .pipe(gulp.dest(???));
});

Я хочу вывести мои мини файлы css на следующие пути:

./httpdocs-site1/media/css
./httpdocs-site2/media/css
./httpdocs-site3/media/css

Я не понимаю, как использовать источники/места назначения? Или я пытаюсь выполнить слишком много в одной задаче?

Изменить: обновить пути вывода к соответствующим каталогам сайтов.

4b9b3361

Ответ 1

Я думаю, что может помочь запущенные задачи для каждой папки.

Обновление

Следуя идеям в рецепте и упрощая образец, чтобы дать идею, это может быть решением:

var gulp = require('gulp'),
    path = require('path'),
    merge = require('merge-stream');

var folders = ['httpdocs-site1', 'httpdocs-site2', 'httpdocs-site3'];

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

    var tasks = folders.map(function(element){
        return gulp.src(element + '/media/sass/**/*.scss', {base: element + '/media/sass'})
            // ... other steps ...
            .pipe(gulp.dest(element + '/media/css'));
    });

    return merge(tasks);
});

Ответ 2

Вы можете использовать gulp-rename, чтобы изменить, где будут записываться файлы.

gulp.task('sass', function() {
    return gulp.src(sass_paths, { base: '.' })
        .pipe(sass({errLogToConsole: true}))
        .pipe(autoprefixer('last 4 version'))
        .pipe(minifyCSS({keepBreaks:true}))
        .pipe(rename(function(path) {
            path.dirname = path.dirname.replace('/sass', '/css');
            path.extname = '.min.css';
        }))
        .pipe(gulp.dest('.'));
});

Важный бит: используйте параметр base в gulp.src.

Ответ 3

вам захочется использовать потоки слияния, если вы хотите использовать несколько srcs, но вы можете иметь несколько мест назначения внутри одного и того же. Вот пример.

var merge = require('merge-stream');


gulp.task('sass', function() {
   var firstPath = gulp.src(sass_paths[0])
               .pipe(sass({errLogToConsole: true}))
               .pipe(autoprefixer('last 4 version'))
               .pipe(minifyCSS({keepBreaks:true}))
               .pipe(rename({ suffix: '.min'}))
               .pipe(gulp.dest('./httpdocs-site1/media/css'))
               .pipe(gulp.dest('./httpdocs-site2/media/css'));
   var secondPath = gulp.src(sass_paths[1])
               .pipe(sass({errLogToConsole: true}))
               .pipe(autoprefixer('last 4 version'))
               .pipe(minifyCSS({keepBreaks:true}))
               .pipe(rename({ suffix: '.min'}))
               .pipe(gulp.dest('./httpdocs-site1/media/css'))
               .pipe(gulp.dest('./httpdocs-site2/media/css'));
   return merge(firstPath, secondPath);
});

Я предположил, что вы хотите, чтобы здесь были разные пути, поэтому есть site1 и site2, но вы можете сделать это по мере необходимости. Также вы можете указать dest до любого из шагов, если, например, вы хотели иметь один dest, у которого был файл .min, и тот, который этого не сделал.

Ответ 4

Для тех, кто задает себе вопрос, как они могут работать с общими/специфичными css файлами (работает одинаково для скриптов), вот возможный выход для решения этой проблемы:

var gulp = require('gulp');
var concat = require('gulp-concat');
var css = require('gulp-clean-css');

var sheets = [
    { src : 'public/css/home/*', name : 'home.min', dest : 'public/css/compressed' },
    { src : 'public/css/about/*', name : 'about.min', dest : 'public/css/compressed' }
];

var common = {
    'materialize' : 'public/assets/materialize/css/materialize.css'
};

gulp.task('css', function() {
    sheets.map(function(file) {
        return gulp.src([common.materialize, file.src + '.css', file.src + '.scss', file.src + '.less'])
            .pipe( concat(file.name + '.css') )
            .pipe( css() )
            .pipe( gulp.dest(file.dest) )
    }); 
});

Все, что вам нужно сделать, это добавить ваши листы по мере создания нотации объектов.

Если у вас есть дополнительные скрипты commons, вы можете сопоставить их по имени на объекте common, а затем добавить их после материализации для этого примера, но перед file.src + '.css', поскольку вы можете переопределить общие файлы с вашими обычаями файлы.

Обратите внимание, что в атрибуте src вы также можете указать путь следующим образом:

'public/css/**/*.css'

чтобы охватить все потоки.

Ответ 5

используйте gulp -if, помогите мне много.

gulp - первый аргумент. это второй аргумент gulp -match condition

gulp -if можно найти в gulp-if

import {task, src, dest} from 'gulp';
import VinylFile = require("vinyl");
const gulpif = require('gulp-if');

src(['foo/*/**/*.md', 'bar/*.md'])
    .pipe(gulpif((file: VinylFile) => /foo\/$/.test(file.base), dest('dist/docs/overview')))
    .pipe(gulpif((file: VinylFile) => /bar\/$/.test(file.base), dest('dist/docs/guides')))
});