我使用gulp-rename重命名文件
我想从几个目录中获取文件并将其放入带有一些后缀的输出目录中。
此后缀取决于原始目录名称:
['/dir/a/style.css', '/dir/b/style.css', '/dir/c/style.css']
=>
['/output/style_a.css', '/output/style_b.css', '/output/style_c.css']
我这样做:
var gulp = require('gulp'),
rename = require('gulp-rename'),
files_list = [
'/dir/a/style.css',
'/dir/b/style.css',
'/dir/c/style.css'
];
gulp.src(files_list)
.pipe(rename(function(path) {
// extract dir letter:
var dir_letter = path.dirname.split('dir/')[1].split('/')[0];
// rename file by changing "path" object:
path.basename += '_' + dir_letter;
}))
.pipe(gulp.dest('/output'));
方法rename
迭代每个文件的回调。
此回调将对象path
作为参数,其中包含dirname
属性。
但是 path.dirname
的值为'.'
,而不是原始文件路径,如'/dir/a/style.css'
。
所以,我的问题是如何在rename
回调中获取初始文件路径?
答案 0 :(得分:-1)
dirname是从gulp.src设置的基本目录到文件名的相对路径。
和
dirname是剩余目录,如果没有,则为./。
因此,您可能需要使用glob(/*/
)来确保它在dirname
中为您提供额外的路径信息。
var gulp = require('gulp'),
rename = require('gulp-rename');
gulp.src('/dir/*/style.css')
.pipe(rename(function(path) {
// extract dir letter:
var dir_letter = path.split('dir/')[1].split('/')[0];
// rename file by changing "path" object:
path.basename += '_' + dir_letter;
}))
.pipe(gulp.dest('/output'));
如果不起作用,您也可以尝试gulp.src('/dir/*/style.css', {base: '/'})
(请参阅gulp.src docs)。
答案 1 :(得分:-1)
您可以使用新流来获取路径。
var Stream = require('stream');
var fileName = '';
function getFileName() {
var stream = new Stream.Transform({ objectMode: true });
stream._transform = function(file, unused, callback) {
fileName = file.path;
callback(null, file);
};
return stream;
}
然后您可以在重命名流中获取文件路径。
gulp.src('/dir/*/style.css')
.pipe(getFileName(fileName))
.pipe(rename(function(path) {
console.log(fileName);
}))
.pipe(gulp.dest('/output'));