2017-02-24 73 views
1

我想通過修改現有路徑的副本來創建一些新路徑。節點路徑對象看起來非常基本。我可以看到默認路徑對象可能如何,但看起來很笨重。NodeJS中的路徑操作

什麼是改變

a/path/to/file.json

到其他兩條路徑

a/path/to/file-original.json

a/path/to/file-comparand.json

的路徑可能是相對或絕對的最巧妙的方法,所以我希望對於那些只能讓我改變的東西10而不必擔心rootdir對象。

是否有高級路徑模塊或其他我缺少的東西?

感謝所有幫助

回答

1

假設有沒有這將實現這個功能對你來說,使用path.parse不必是笨重的圖書館 - 其實,我覺得用這可能是這樣做的最徹底的方法:

let { dir, name, ext } = path.parse("a/path/to/file.json"); 
let path1 = path.join(dir, name + "-original" + ext); 
let path2 = path.join(dir, name + "-comarand" + ext); 

該代碼段使用destructuring,所以您需要一個最新版本的節點來運行它。也就是說,你可以用正常訪問解析的路徑對象代替它:

let p = path.parse("a/path/to/file.json"); 
let path1 = path.join(p.dir, p.name + "-original" + p.ext); 
let path2 = path.join(p.dir, p.name + "-comarand" + p.ext); 

沒有那麼糟!

如果是這種東西,你會經常在你的項目做,也不會太硬擡出來爲效用函數,就像這樣:

function suffixFilename(path, suffix) { 
    let { dir, name, ext } = path.parse(path); 
    return path.join(dir, name + "-" + suffix + ext); 
} 

let path1 = suffixFilename("a/path/to/file.json", "original"); 
let path2 = suffixFilename("a/path/to/file.json", "comparand"); 
+0

這是我的第一個想法,但如果路徑是絕對的,你將不得不考慮'root'。路徑對象中有一個'isAbsolute'函數,但是對於如此簡單的事情,代碼變得相當複雜。我推測我一定錯過了一些東西。 – moefinley

+0

@moefinley:我不確定遵循 - 'dir'總是包含路徑的'root'(如果有的話),所以這個方法應該處理相對路徑和絕對路徑。也就是說,我沒有在這臺PC上訪問適當的節點環境,所以我無法測試這是確定的! –

+0

噢,是的,你是對的。我想我錯過了閱讀文檔。謝謝。 – moefinley

0

除了@喬的回答,這是一個簡單的版本,需要modify-filename包。

var modifyFilename = require('modify-filename'); 
const originalPath = "a/path/to/file.json"; 

const originalFilename = modifyFilename(originalPath, (name, ext) => { 
    return `${name}-original${ext}`; 
}); 

const comparandFilename = modifyFilename(originalPath, (name, ext) => { 
    return `${name}-comparand${ext}`; 
}); 
+1

使用回調使該函數更具可重用性是設計這個的好方法,實際上:) –