2014-01-12 9 views
23

私はnodejsを初めて使っています。この応答が間違っているの決意〜(UNIXのホームディレクトリ)の例〜FOO、〜ホーム/ 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には、任意のプラットフォーム上でユーザのホームディレクトリを返しますホームディレクトリである:私は今日

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

Linux/Unix/Macの現在のホームディレクトリでOKの場合は、 'process.env。他の記事で言及されているノードモジュールソリューションの代わりに、「HOME」がうまく機能しているようです。例えばしかし、 '〜/ somepath'は' process.env.HOME + '/ somepath''となるかもしれませんが、 '〜someuserhome/somepath'の元の問題は解決されません。 – tresf

17

QZ Supportと記載されていますが、OSX/Linuxではprocess.env.HOMEを使用できます。ここには依存関係のない単純な関数があります。 ~拡大がbash(またはシェル)特定のものですので、これはノードではありません

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

理由があります。正しく逃げる方法は不明です。詳細は、this commentを参照してください。

これを提供するさまざまなライブラリ、コードのほとんどわずか数行...

見ていないので、etc-passwdを使用しています。

+1

はバックグラウンドの説明を尊重し、 '〜'はbashのことです。 – the0ther

+0

os.homedir()は私が探していたものです!ありがとう! – math2001

関連する問題