[英]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.