我是nodejs的新手。 CAN節點的決心〜(UNIX主目錄)例如〜FOO,酒吧〜 到/ home/foo的,/家庭/條在node.js中展開/解析〜
> path.normalize('~mvaidya') '~mvaidya' > path.resolve('~mvaidya') '/home/mvaidya/~mvaidya' >
這種反應是錯誤的;我希望〜mvaidya必須解析爲/ home/mvaidya
我是nodejs的新手。 CAN節點的決心〜(UNIX主目錄)例如〜FOO,酒吧〜 到/ home/foo的,/家庭/條在node.js中展開/解析〜
> path.normalize('~mvaidya') '~mvaidya' > path.resolve('~mvaidya') '/home/mvaidya/~mvaidya' >
這種反應是錯誤的;我希望〜mvaidya必須解析爲/ home/mvaidya
此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
今天我使用https://github.com/sindresorhus/untildify
我在OSX上運行,運行良好。
由於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;
}
當技術上它應該解析爲'/ home/foo'(至少在zsh中)時,會錯誤地將'〜foo'解析爲'/ home/<當前用戶>/foo'。 – mpen
的原因,這不是在節點是因爲~
膨脹是bash
(或殼)特定的東西。目前還不清楚如何正確擺脫它。有關詳細信息,請參閱this comment。
有提供這種各種庫,大部分只需要幾行代碼...
https://npm.im/untildify;沒有做太多os.homedir()
,參見index.js#L10
https://npm.im/expand-tilde;基本上用os-homedir
來實現,見index.js#L12
https://npm.im/tilde-expansion;這款採用etc-passwd
所以似乎並不十分跨平臺的,看到index.js#L21
所以,你可能想這個做自己。
對於那些可以在Linux/Unix/Mac上使用當前的主目錄,'process.env。HOME'似乎可以很好地代替其他帖子中提到的節點模塊解決方案。例如'〜/ somepath'可以是'process.env.HOME +'/ somepath',但是會警告......它不會解決原來的'〜someuserhome/somepath'問題,因爲這需要鏈接模塊解決方案。 – tresf