dav*_*ark 30 automation overwrite node.js gulp
假设我想替换一堆文件中的版本号,其中许多文件存在于子目录中.我将通过gulp-replace管道文件来运行regex-replace函数; 但我最终会想要覆盖所有原始文件.
任务可能如下所示:
gulp.src([
'./bower.json',
'./package.json',
'./docs/content/data.yml',
/* ...and so on... */
])
.pipe(replace(/* ...replacement... */))
.pipe(gulp.dest(/* I DONT KNOW */);
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能结束它,以便每个src文件在原始位置覆盖自己?有什么我可以传递到gulp.dest()这将做到这一点?
Ove*_*ous 40
我可以想到两个解决方案:
为base您添加一个选项,gulp.src以便:
gulp.src([...files...], {base: './'}).pipe(...)...
Run Code Online (Sandbox Code Playgroud)
这将告诉gulp保留整个相对路径.然后传递'./'到gulp.dest()覆盖原文件.(注意:这是未经测试的,您应该确保备份,以防它不起作用.)
使用功能.Gulp只是JavaScript,所以你可以这样做:
[...files...].forEach(function(file) {
var path = require('path');
gulp.src(file).pipe(rename(...)).pipe(gulp.dest(path.dirname(file)));
}
Run Code Online (Sandbox Code Playgroud)
如果你需要异步运行它们,第一个将更容易,因为你需要使用类似的东西event-stream.merge,并将流映射到数组.它看起来像
var es = require('event-stream');
...
var streams = [...files...].map(function(file) {
// the same function from above, with a return
return gulp.src(file) ...
};
return es.merge.apply(es, streams);
Run Code Online (Sandbox Code Playgroud)Yil*_*ing 14
告诉gulp写入相关文件的基本目录,就像这样:
.pipe(
gulp.dest(function(data){
console.log("Writing to directory: " + data.base);
return data.base;
})
)
Run Code Online (Sandbox Code Playgroud)
(data参数是一个乙烯基文件对象)
这种方法的优点是,如果您拥有来自多个源的文件,每个文件都嵌套在文件结构的不同级别,则此方法允许您正确覆盖每个文件.(因为在管道链的上游设置了一个基本目录)
| 归档时间: |
|
| 查看次数: |
16739 次 |
| 最近记录: |