gulp src忽略递归副本的glob路径的一部分
我想从bower包中将一些openui5资源文件复制到我的输出文件夹中。他们有一个共同的前缀(openui5-)。他们都有一个名为“资源”的子文件夹。我想将该子文件夹中的内容复制到输出中的一个常见“资源”文件夹中。gulp src忽略递归副本的glob路径的一部分
我想用glob来复制它们。现在我必须明确地给每个路径
['bower_components/openui5-sap.m/resources/**/*',
'bower_components/openui5-sap.ui.core/resources/**/*',
'bower_components/openui5-themelib_sap_belize/resources/**/*']
我想用这样的模式:
'bower_components/openui5-*/resources/**/*'
但如果我这样做,我得到复制,太全模块名,所以我的资源文件夹是这样的:
out/resources/
+ -- openui5-sap.m/resources/...
+ -- openui5-sap.ui.core/resources/...
+ -- openui5-themelib_sap_belize/resources/...
至于我才明白,这是因为每默认gulp.src取第一水珠(这是在模块名称),使递归结构从那里。
有没有办法忽略输出的glob模式的部分或使用另一个glob修剪输出路径?
我玩过并搜索任何解决方案,但找不到任何东西。
一饮而尽,重命名似乎拉平整个层次:
gulp.task('copyui5resources', function() {
gulp.src('bower_components/openui5-*/**/*')
.pipe(rename({ dirname: '' }))
.pipe(gulp.dest('out/resources'));
});
而且使用的基本选项也没有帮助。这似乎只是一个部分复制它:
gulp.task('copyui5resources', function() {
gulp.src('bower_components/openui5-*/**/*', {base: 'bower_components/openui5-*'})
.pipe(gulp.dest('out/resources'));
});
这里是我的输入文件夹结构,我一饮而尽任务截图至今。感谢您的帮助!
你是在正确的轨道尝试使用gulp-rename
上。但是dirname
选项对于您要实现的功能来说功能不够强大,因为它只能替换整个目录结构。你只想替换它的一部分。
像这些gulp-rename
案件可以用一个功能,它允许你改变dirname
使用JavaScript的一切所提供的包括string.replace()
供应。
这意味着你可以这样做:
var gulp = require('gulp');
var rename = require('gulp-rename');
gulp.task('default', function() {
return gulp.src('bower_components/openui5-*/resources/**/*')
.pipe(rename(f => f.dirname = f.dirname.replace(/openui5-.*?\//, '')))
.pipe(gulp.dest('out/'));
});
谢谢你的帮助斯文,
我只是那一抹今天早上迷迷糊糊的另一篇文章之前,我看了你的帖子:(我删除了前两个部分的路径,并得到了预期的结果,它的优点是,你可以跳过尽可能多的部分,正则表达式的解决方案的优势是捕捉更多类似的路径部分。解决方案我想出了:
var gulp = require('gulp'),
rename = require('gulp-rename'),
path = require('path');
gulp.task('copyui5resources', function() {
gulp.src('bower_components/openui5-*/resources/**/*')
.pipe(rename(function(p) {
var nda = p.dirname.split(/[\\\/]/);
nda.splice(0, 2);
p.dirname = nda.length > 0 ? path.join.apply(null, nda) : "";
}))
.pipe(gulp.dest('out/resources'));
});
我用路径来重新加入独立于操作系统的路径。Splice使用软件包名称和资源目录删除前两部分。你必须使用path.join.apply,因为它会使数组扁平化,否则会出错。