![](/img/trans.png)
[英]How do I make a min file in the same path or dest on gulp-rename and gulp-uglify?
[英]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.