Использование функции условно с gulp-if - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь условно изменить пути к файлам JS при работе.Я использую gulp-inject-string вместе с gulp-if для вызова функции, которая вставляет мой удаленный путь + имя родительской папки серии html-файлов:

```
...(require a bunch of stuff here)...
var inject = require('gulp-inject-string');

function getFolders(dir) {
    return fs.readdirSync(dir)
        .filter(function(file) {
            return fs.statSync(path.join(dir, file)).isDirectory();
        });
}

function injectAfterEach(src) {
    var folders = getFolders(config.root.dest);

    var tasks = folders.map(function(folder) {
        if (folder !== 'base') {
            var fullPath = path.join(config.remotePath, folder, '/');
            console.log('folder: ' + fullPath);
            return gulp.src(src)
                .pipe(inject.afterEach('<script src="', fullPath))
                .pipe(gulp.dest(config.tasks.html.dest))
        }
    });
    return tasks;
}

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

    return gulp.src(config.tasks.html.src)
        .pipe(gulpif(process.env.NODE_ENV == 'production', injectAfterEach(config.tasks.html.src) ))
        .pipe(gulpif(process.env.NODE_ENV == 'production', removeCode({ production: true })))
        .pipe(gulpif(process.env.NODE_ENV == 'production', htmlmin(config.tasks.html.htmlmin)))
        .pipe(gulp.dest(config.tasks.html.dest))
        .pipe(browserSync.stream());
});
```

Я продолжаю получать "dest.on"это не ошибка функции, которую я предполагаю, потому что мой injectAfterEach не возвращает объект stream.Transform?Может кто-нибудь уточнить, как лучше запустить эту функцию условно?Мой глоток немного шаткий, но я попытался сослаться на api docs для этого конкретного случая использования.

1 Ответ

0 голосов
/ 18 мая 2018

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

Первый пункт: ваша getFolders() функция может быть легко заменена на glob.sync() see call glob options .Поскольку вам, очевидно, нужны только папки, ваш шаблон glob для вызова glob ДОЛЖЕН заканчиваться на "/", то есть path.sep.

Ключевым моментом для возврата потока является использование gulp-merge , который позволяет вам возвращать объединенный поток каждой из папок. Map отдельные потоки.

const gulp = require('gulp');
const path = require('path');
const merge = require('gulp-merge');
const gulpif = require('gulp-if');
const glob = require("glob");
const inject = require('gulp-inject-string');


function injectAfterEach(src) {

  const folders = glob.sync(src);
  console.log(folders);

  return merge(folders.map(function (folder) {

    console.log("folder basename = " + path.basename(folder));

    if (path.basename(folder) !== 'base') {

      let fullPath = path.join("RemotePath", path.sep, path.basename(folder), path.sep);
      console.log('fullPath: ' + fullPath);

        return gulp.src(path.join(folder, '*.html') )
            .pipe(inject.afterEach('<script src="', fullPath))
            .pipe(gulp.dest('dist'))
      }
  }));
}

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

  return gulp.src('./htmlFolder')

    .pipe(gulpif(true, injectAfterEach('./htmlFolders/**/')))

      // just commented out for testing
      // .pipe(gulpif(process.env.NODE_ENV == 'production', removeCode({ production: true })))
      // .pipe(gulpif(process.env.NODE_ENV == 'production', htmlmin(config.tasks.html.htmlmin)))
      .pipe(gulp.dest('dist'))
      // .pipe(browserSync.stream());
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...