Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Gulp rename:获取原始文件路径_Javascript_Node.js_Gulp_Gulp Rename - Fatal编程技术网

Javascript Gulp rename:获取原始文件路径

Javascript Gulp rename:获取原始文件路径,javascript,node.js,gulp,gulp-rename,Javascript,Node.js,Gulp,Gulp Rename,我正在使用重命名文件。 我想从几个目录中获取文件,并将它们放入带有后缀的输出目录。此后缀取决于原始目录名: ['/dir/a/style.css'、'/dir/b/style.css'、'/dir/c/style.css']=> 我是这样做的: var gulp = require('gulp'), rename = require('gulp-rename'), files_list = [ '/dir/a/style.css', '/dir/b

我正在使用重命名文件。
我想从几个目录中获取文件,并将它们放入带有后缀的输出目录。
此后缀取决于原始目录名:

['/dir/a/style.css'、'/dir/b/style.css'、'/dir/c/style.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
属性。
但是
路径。dirname
具有值
'.
,而不是像
'/dir/a/style.css'那样的原始文件路径。

因此,我的问题是如何从以下位置获取
重命名
回调中的初始文件路径?

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:'/'})

您可以使用新的流来获取路径

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'));

some/
是否应该是
path.dirname.split('some/')
中的其他内容?@MattMS谢谢,更正。我的意思是
path.dirname.split('dir/')
您的代码毫无意义,getFileName创建了一个新流,并且不接受fileName参数?