Node.jsのパスモジュールのjoinメソッドと__dirnameと./の違い
1.結合方法
path.join()メソッドは、プラットフォーム固有の区切り文字を区切り文字として使用して、指定されたすべてのパスフラグメントを結合し、結果のパスを正規化します。 |
---|
長さがゼロのパスフラグメントは無視されます。連結されたパス文字列が長さゼロの文字列の場合、「。」が返され、現在の作業ディレクトリが示されます。
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'
path.join('foo', {
}, 'bar');
// 抛出 'TypeError: Path must be a string. Received {}'
パスフラグメントが文字列でない場合はTypeErrorをスローします
次に、__dirnameと./の違い
__dirname
実行されたjsファイルの絶対パスを常に指す
例を見る
__dirnameが/react-admin-server/routers/file-upload.jsファイルに書き込まれる場合、その値は/ react-admin-server/routersです。 |
---|
代わり./
に、ノードコマンドを実行したパス(作業パスなど)が返されます
require()
で使用される場合は特殊なケースがあり./
、パスは次のようなスクリプトファイルの相対パスrequire()
になり
例を見てみましょう。
次のディレクトリ構造があるとします。
/react-admin-server
/routers
file-upload.js
次に、file-upload.jsに次のコードがあり、ターミナルで次のコマンドを実行します
cd /react-admin-server/routers
node file-upload.js
var path = require("path");
console.log(path.resolve(".")); // /react-admin-server/routers
console.log(path.resolve(__dirname)); // /react-admin-server/routers
.
は現在の作業ディレクトリであり、この場合は、の/react-admin-server/routers
ファイルパスです。この場合は__dirname
file-upload.js
/react-admin-server/routers
ただし、作業ディレクトリが/react-admin-server
cd /react-admin-server
node routers/file-upload.js
取得します
/react-admin-server
/react-admin-server/routers
この時点で、.
作業ディレクトリをポイントします。つまり/react-admin-server
、__dirname
まだをポイントし/react-admin-server/routers
ます。
3.包括的なアプリケーション
//__dirname表示当前文件所在的根路径,也就是/routers,然后..表示向上退一级,也就是到了项目根目录,然后public/upload表示到了这个目录
const dirPath = path.join(__dirname, '..', 'public/upload')