gulp.dest с glob gulp.src - сделать его относительным - PullRequest
1 голос
/ 11 марта 2019

У меня есть простое задание в gulp, которое должно переносить js:

function js() {
  return gulp.src('lib/modules/*/source/js/*.js')
    .pipe(babel({
      presets: ['@babel/env']
    }))
    .pipe(gulp.dest((fileVinyl) => {
      return fileVinyl.path.replace('/source/', '/public/').replace(/[^\/]*js$/, '')
    }))
}

exports.default = gulp.parallel(js)

И у меня есть такая файловая структура:

lib
- modules
  - module1
    - source
      - js
        - file.js
  - module2
    - source
      - js
        - file.js
  - moduleN (...)

Теперь я хочу, чтобы он создавал такие файлы:

lib
- modules
  - module1
    - public
      - js
        - file.js
    - source (...)
  - module2
    - public
      - js
        - file.js
    - source (...)
  - moduleN (...)

Конечно, приведенный выше код не работает, он выводит файлы в папки типа lib/modules/module1/public/js/module1/source/js/. Есть ли способ заставить файл gulp выводить файл по указанному пути, вместо этого он рассматривает его как базовый путь для добавления собственных идей?

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

У меня возникла проблема с неправильной базой для файла. Но так как мне нужно было изменить его динамически, я не мог просто настроить его в параметрах src. К счастью, я мог легко изменить его в функции dest, где у меня есть доступный путь:

 .pipe(gulp.dest((fileVinyl) => {
      //changing the base so that it will include the whole path to the file,
      //excluding the filename
      fileVinyl.base = fileVinyl.path.replace(/[^\/]*js$/, '')

      //outputing the file to a /public/ folder instead of /source/,
      //keeping the structure
      return path.relative(process.cwd(), fileVinyl.path.replace('/source/', '/public/').replace(/[^\/]*js$/, ''))
    }))
1 голос
/ 11 марта 2019

используйте параметр base в gulp.src

, например:

gulp.src('your_file.js', {base: 'your_base_path'})
.pipe(/*...*/)

, в вашем случае base должно быть lib/modules

как это:

gulp.src('lib/modules/**/*.js', {base: 'lib/modules'})
.pipe(/*...*/)
.pipe(gulp.dest('lib/modules'))

это создаст то, что вы хотите:

lib
- modules
  - module1
    - public
      - js
        - file.js

Эта опция говорит gulp игнорировать базовую часть пути и обрабатывать остальную часть пути как относительную и, следовательно, реплицироватьэто в dest

...