可以使用什么自定义函数(在节点中),如果传递三个参数,即filePath
,basePath
和destPath
,它将返回一个新路径。例如。
示例功能签名
var path = require('path'); // Nodes `path` module is likely to help?
/**
* Returns a new filepath
* @param {String} filePath - The path to the source file.
* @param {String} basePath - The path to determine which part of the
* FilePath argument is to be appended to the destPath argument.
* @param {String} destPath - The destination file path.
* @return {String} The new filepath.
*/
function foo(filePath, basePath, destPath) {
// ... ?
return newFilePath;
}
使用示例:
下面是一些调用函数的例子,以及我希望在传递参数后返回的值:
// Example A
var a = foo('./foo/bar/baz/quux/filename.json', 'foo/bar/baz/', './dist');
console.log(a) // --> 'dist/baz/quux/filename.json'
// Example B
var b = foo('./a/b/c/d/e/filename.png', './a/b/c', './images/logos/');
console.log(b) // --> 'images/logos/c/d/e/filename.png'
// Example C
var c = foo('images/a/b/filename.png', './images/a/b', 'pictures/');
console.log(c) // --> 'pictures/b/filename.png'
更多信息
basePath
String
将通知函数应该修剪filePath
值的位置,其目的类似于 gulp base option与gulp.src()
函数一起使用。String
值(即路径)将始终是相对的,但是,它们有时会包含当前目录前缀./
,有时不包括。结尾斜杠/
可能会或可能不会出现在路径String
上。path.normalize
然后拆分Array
等等。但是,我很确定{{} 3}}模块将在解决方案中使用。提前致谢。
答案 0 :(得分:2)
您可以使用简单的字符串替换来实现此目的。在此之前只需规范化路径。
./
开头,请将其删除。 /
结尾,请删除它,然后删除最后一个路径部分(第一个示例中为baz
)filePath.replace(basePath, destPath)
答案 1 :(得分:1)
function foo(filePath, basePath, destPath) {
if(filePath.charAt(0)=='.'){
filePath=filePath.substr(1,filePath.length);
}
if(filePath.charAt(0)=='/'){
filePath=filePath.substr(1,filePath.length);
}
if(basePath.charAt(0)=='.'){
basePath=basePath.substr(1,basePath.length);
}
if(basePath.charAt(0)=='/'){
basePath=basePath.substr(1,basePath.length);
}
if(destPath.charAt(0)=='.'){
destPath=destPath.substr(1,destPath.length);
}
if(destPath.charAt(0)=='/'){
destPath=destPath.substr(1,destPath.length);
}
if(basePath.charAt(basePath.length-1)!='/'){
basePath+="\/";
}
if(destPath.charAt(destPath.length-1)!='/'){
destPath+="\/";
}
var temp = basePath.split('/')[basePath.split('/').length-2];
var newFilePath = temp+'/'+filePath.split(basePath)[1];
newFilePath=destPath+'/'+newFilePath;
return newFilePath.replace(/\/\//g,"/");
}
// Example A
var a = foo('./foo/bar/baz/quux/filename.json', 'foo/bar/baz/', './dist');
console.log(a) // --> 'dist/baz/quux/filename.json'
// Example B
var b = foo('./a/b/c/d/e/filename.png', './a/b/c', './images/logos/');
console.log(b) // --> 'images/logos/c/d/e/filename.png'
// Example C
var c = foo('images/a/b/filename.png', './images/a/b', 'pictures/');
console.log(c) // --> 'pictures/b/filename.png'