给定文件路径,基本路径和新的destpath,Node / JavaScript函数返回新路径

时间:2017-03-17 17:00:49

标签: javascript node.js path gulp filepath

可以使用什么自定义函数(在节点中),如果传递三个参数,即filePathbasePathdestPath,它将返回一个新路径。例如。

示例功能签名

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' 

更多信息

  1. 从示例函数调用中可以看出,basePath String将通知函数应该修剪filePath值的位置,其目的类似于 gulp base optiongulp.src()函数一起使用。
  2. 参数String值(即路径)将始终是相对的,但是,它们有时会包含当前目录前缀./,有时不包括。结尾斜杠/可能会或可能不会出现在路径String上。
  3. 解决方案必须跨平台工作,没有任何其他依赖关系。它也必须可用于早期节点版本(> = 0.10.28)
  4. 我使用path模块的实用程序进行了各种失败的尝试,例如path.normalize然后拆分Array等等。但是,我很确定{{} 3}}模块将在解决方案中使用。
  5. 提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用简单的字符串替换来实现此目的。在此之前只需规范化路径。

  1. filePath和basePath:如果它们以./开头,请将其删除。
  2. basePath:如果以/结尾,请删除它,然后删除最后一个路径部分(第一个示例中为baz
  3. 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'