Javascript 正在Gulp任务中获取相对源/目标
假设我有一个文件位于Javascript 正在Gulp任务中获取相对源/目标,javascript,gulp,Javascript,Gulp,假设我有一个文件位于/Users/me/app/src/scripts/foo.js。我设置了一个gulptasks,将此文件写入/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。我
/Users/me/app/src/scripts/foo.js
。我设置了一个gulptasks,将此文件写入/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
。我看不到从file.path
、file.cwd
、file.base
等任何组合中获取scripts/foo.js
的方法
如何获取所需路径的一部分?假设您需要相对于指定基的路径,则需要使用类似于节点的路径模块的内容来执行提取:
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
对不起,但是相对于什么?相对于基地?别介意我。终于明白你的问题了。我正在发布一个答案。请让我知道我是否可以重新表述问题的任何部分,以便将来遇到此问题的任何人更清楚。请查看我的答案,看看我是否正确理解您的意思这很接近,但在我的系统上它输出
。/../src/scripts/foo.js
,当我们想要脚本/foo.js
时,我们会觉得有趣。你能在parsePath中console.log
file.cwd,file.base,file.path并发布输出吗?cwd:/app,base:/app/src/scripts,path:/app/src/scripts/foo.js我认为这不再正确了。每当我console.log
文件.base时,它也总是一个绝对路径。path.relative(file.cwd,file.path)
对我有效(输出中不包括。/../../
)