【问题标题】:Gulp-rename: get original file pathGulp-rename:获取原始文件路径
【发布时间】:2017-01-18 01:00:13
【问题描述】:

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

【问题讨论】:

  • some/ 应该是 path.dirname.split('some/') 中的其他内容吗?
  • @MattMS 谢谢,已更正。我的意思是path.dirname.split('dir/')

标签: javascript node.js gulp gulp-rename


【解决方案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'));

【讨论】:

  • 你的代码没有意义,getFileName新建一个流,不接受fileName的参数?
【解决方案2】:

来自gulp-rename 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 docs)。

【讨论】:

    猜你喜欢
    • 2010-11-02
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2015-09-29
    相关资源
    最近更新 更多