繁体   English   中英

Gulp重命名:获取原始文件路径

[英]Gulp-rename: get original file path

我正在用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回调中获取初始文件路径?

gulp重命名docs

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('/dir/*/style.css', {base: '/'}) (请参阅gulp.src docs )。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM