簡體   English   中英

gulp.dest與glob gulp.src - 使它相對

[英]gulp.dest with glob gulp.src - making it relative

我在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將文件輸出到指定的路徑,而不是將其視為附加自己想法的基本路徑?

我在這里遇到的問題是該文件的錯誤基礎。 但由於我需要動態更改它,我不能只在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$/, ''))
    }))

使用gulp.src中的選項base

像這樣:

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中復制它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM