簡體   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