在Gulp任务中获取相对源/目标

时间:2015-04-13 20:54:03

标签: javascript gulp

我们说/Users/me/app/src/scripts/foo.js有一个档案。我设置了一个gulp任务,将此文件写入/Users/me/app/dist/scripts/foo.js

gulp.src('src/scripts/foo.js', base: 'src')
.pipe(...)
.pipe(gulp.dest('dist'))

我正在编写一个简单的插件,需要知道scripts/foo.js。我希望file.relative成为这个部分路径,而是提供foo.js。我没有找到从scripts/foo.jsfile.pathfile.cwd等任意组合中获取file.base的方法。

如何获得我需要的路径?

1 个答案:

答案 0 :(得分:9)

假设您想要相对于指定基数的路径,您可能希望使用类似节点的路径模块来进行提取:

var path = require('path');
// this is how you get the relative path from a vinyl file instance
path.relative(path.join(file.cwd, file.base), file.path);

以下是使用您的示例的示例gulpfile:

var path = require('path'),
    gulp = require('gulp'),
    through = require('through2');

function parsePath() {
    return through.obj(function (file, enc, cb) {
        console.log(file.base);
        console.log(file.cwd);
        console.log(file.path);
        console.log(path.relative(path.join(file.cwd, file.base), file.path))
        cb();
    });
}

gulp.task('default', function () {
    gulp.src('src/scripts/foo.js', { base: 'src'})
        .pipe(parsePath())
        .pipe(gulp.dest('dist'));
});

这是我运行这个gulpfile时的输出:

src
/Volumes/Data/Project/sandbox/gulp-ex
/Volumes/Data/Project/sandbox/gulp-ex/src/scripts/foo.js
scripts/foo.js

这是项目文件夹结构

gulp-ex/
    |_ gulpfile.js
    |_ src/scripts/foo.js
    |_ dist