2014-01-12 55 views
23

我是nodejs的新手。 CAN節點的決心〜(UNIX主目錄)例如〜FOO,酒吧〜 到/ home/foo的,/家庭/條在node.js中展開/解析〜

 
> path.normalize('~mvaidya') 
'~mvaidya' 
> path.resolve('~mvaidya') 
'/home/mvaidya/~mvaidya' 
> 

這種反應是錯誤的;我希望〜mvaidya必須解析爲/ home/mvaidya

回答

10

此NodeJS庫通過異步回調支持此功能。它使用etc-passswd lib來執行擴展,因此可能不能移植到Windows或其他非Unix/Linux平臺。

如果只想擴大主頁的當前用戶那麼這個重量更輕的API可能是你所需要的。它也是同步在大多數平臺上使用和工作的簡單方法。

例子:

expandHomeDir = require('expand-home-dir') 

expandHomeDir('~') 
// => /Users/azer 

expandHomeDir('~/foo/bar/qux.corge') 
// => /Users/azer/foo/bar/qux.corge 

另一個相關的LIB是家庭-dir的任何平臺上返回用戶的主目錄:

https://www.npmjs.org/package/home-dir 
+8

對於那些可以在Linux/Unix/Mac上使用當前的主目錄,'process.env。HOME'似乎可以很好地代替其他帖子中提到的節點模塊解決方案。例如'〜/ somepath'可以是'process.env.HOME +'/ somepath',但是會警告......它不會解決原來的'〜someuserhome/somepath'問題,因爲這需要鏈接模塊解決方案。 – tresf

17

由於QZ Support指出,您可以在OSX/Linux上使用process.env.HOME。這是一個簡單的函數,沒有依賴關係。

const path = require('path'); 
function resolveHome(filepath) { 
    if (filepath[0] === '~') { 
     return path.join(process.env.HOME, filepath.slice(1)); 
    } 
    return filepath; 
} 
+1

當技術上它應該解析爲'/ home/foo'(至少在zsh中)時,會錯誤地將'〜foo'解析爲'/ home/<當前用戶>/foo'。 – mpen

6

的原因,這不是在節點是因爲~膨脹是bash(或殼)特定的東西。目前還不清楚如何正確擺脫它。有關詳細信息,請參閱this comment

有提供這種各種庫,大部分只需要幾行代碼...

所以,你可能想這個做自己。

+1

欣賞背景解釋,'〜'是一個bash事物。 – the0ther

+0

os.homedir()正是我期待的!謝謝! – math2001