![](/img/trans.png)
[英]How to output files to the parent of their source directory using Webpack in Gulp?
[英]Flattening parent directory but not subdirectories using gulp
我组织了我的代码,以便它在文件夹名称上有一些关键字,例如_DIRECTIVE
。 我的目的是使用gulp.src("**/*_DIRECTIVE/**/*")
编写一个识别文件夹命名模式的gulp.src("**/*_DIRECTIVE/**/*")
任务。 我想复制包含_DIRECTVE
关键字的所有文件夹(及其子文件夹)并将它们放在单独的文件夹中。
我有一个文件夹结构,看起来像
src
|-folder-name_1_DIRECTVE/
| |-subfolder/
| | |-subsubfolder/
| | |-file.js
| |
| |-file.js
|
|-folder/
| |-folder-name_2_DIRECTVE/
| |-subfolder/
| | |-subsubfolder/
| | |-file.js
| |
| |-file.js
|
|
|-folder/
|-subfolderfolder/
|-folder-name_3_DIRECTVE/
|-subfolder/
| |-subsubfolder/
| |-file.js
|
|-file.js
使用gulp
我希望输出是
output
|-folder-name_1_DIRECTVE/
| |-subfolder/
| | |-subsubfolder/
| | |-file.js
| |
| |-file.js
|
|-folder-name_2_DIRECTVE/
| |-subfolder/
| | |-subsubfolder/
| | |-file.js
| |
| |-file.js
|
|-folder-name_3_DIRECTVE/
|-subfolder/
| |-subsubfolder/
| |-file.js
|
|-file.js
我尝试使用gulp-flatten
但它没有帮助,因为它也将我的_DIRECTIVE
文件夹下的子文件夹展平。
请帮忙
您可以使用带有函数回调的gulp-rename来删除相应的父文件夹:
gulp.task('copy', function() {
return gulp.src(['src/**/*_DIRECTIVE/**/*.js'])
.pipe(rename(function(path) {
path.dirname = path.dirname.replace(/^(.+[\\\/])?(?=[^\\\/]+_DIRECTIVE)/, '');
}))
.pipe(gulp.dest('output'));
});
假设与您的问题类似的文件夹结构,为清楚起见更改了文件名:
$ find src -type f
src/top-level_DIRECTIVE/directive1.js
src/top-level_DIRECTIVE/subfolder1/subsubfolder1/directive1-sub.js
src/folder-2/nested-2_DIRECTIVE/directive2.js
src/folder-2/nested-2_DIRECTIVE/subfolder2/subsubfolder2/directive2-sub.js
src/folder-3/double-nested/nested-3_DIRECTIVE/directive3.js
src/folder-3/double-nested/nested-3_DIRECTIVE/subfolder3/subsubfolder3/directive3-sub.js
$ gulp copy
$ find output -type f
output/top-level_DIRECTIVE/directive1.js
output/top-level_DIRECTIVE/subfolder1/subsubfolder1/directive1-sub.js
output/nested-2_DIRECTIVE/directive2.js
output/nested-2_DIRECTIVE/subfolder2/subsubfolder2/directive2-sub.js
output/nested-3_DIRECTIVE/directive3.js
output/nested-3_DIRECTIVE/subfolder3/subsubfolder3/directive3-sub.js
path.dirname
将传递相对于源模式“基础”的文件名:
对于gulp.src('src/**/*.js')
:
src/a.js
⇒ path.dirname == "a.js"
src/nested/folder/b.js
⇒ path.dirname == "nested/folder/b.js"
对于gulp.src('src/directives/**')
:
src/directives/tab-directive/tabs.js
⇒ path.dirname == "tab-directive/tabs.js"
当您更改重命名回调中传递的对象时,文件路径将附加到输出路径:
.pipe(gulp.rename(function (path) {
path.basename = 'flat-' + path.basename;
});
// renames to:
output/some-directory/flat-file1.js
output/other-directory/flat-file2.js
要从路径中删除*_DIRECTIVE
目录的父目录,请使用正则表达式:
path.dirname = path.dirname.replace(/(.+[\\\/])?(?=[^\\\/]+_DIRECTIVE)/, '');
/^(.+[\\\/])?(?=[^\\\/]+_DIRECTIVE)/
^ at the start of the string
( )? match an optional group
.+ with 1 or more characters
[\\\/] and ending with a directory separator (\ or /)
(?= ) followed by a group which is excluded from the match
[^\\\/]+ which has a folder-name (no \, /)
_DIRECTIVE followed by a literal _DIRECTIVE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.