同一个src有多个目的地,一个有基地,一个没有基地



我有一个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;
}))

最新更新