我有一个gullfile.js,我需要有一个带有多个目的地的相同src-glob。但正如这个答案中所指定的,如果我指定了base,那么从some
开始的整个目录都会被复制到pubdir,这是一个问题。
var moduleglob = 'some/path/more/' + themeconfig.name + '/' + '**/**/styles/some.scss';
gulp.src(moduleglob,{ base: "./" })
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest("."))
gulp.src(moduleglob)
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(pubdir))
有没有一种方法可以将以上两个代码合并为一个,同时能够dest到两个正确的文件夹,即一个关于root,一个关于pubdir?
Gulp可以在Gulp重命名插件的帮助下重命名目录。
起初我不知道它是如何工作的,但当我明白了之后,我才知道它实际上是一个非常酷的插件。
这个插件所做的只是在去掉默认的gulp-src和dest行为的基础后,重命名复制的路径。
所以原始目录一直从glob模式之前的所有目录中获取file.base
,因此file.base
是'some/path/more/' + themeconfig.name
,但即使在这个glob之后我也需要一些修改。
当它在pubdir上删除结果时,我想从序列中删除一个名为web
的目录。
此外,我还更改了dest函数上的file.base
,因此在放到pubdir时,它不会相对于原点,并且它将在从序列中删除web
后放置目录。
所以上面两个命令可以这样写。
gulp.src(moduleglob,{ base: "./" })
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sass().on('error', sass.logError))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest("."))
.pipe(rename(function (path) {
// Updates the object in-place
let newpathdir = path.dirname.replace('web/','');
return {
dirname: newpathdir,
basename: path.basename,
extname: path.extname
};
}))
.pipe(gulp.dest(function(file){
file.base = 'some/path/more/' + themeconfig.name;
return pubdir;
}))