path.resoveとpath.joinは何をしていますか?
前言
vueプロジェクトの配置でよく見られるpath.resove、path.join、_彼らは一体何ですか?公式表現は:
Node.jsモジュールシステムでは、各ファイルは独立したモジュールと見なされます.
ええ、ちょっと抽象的です.これらをよりよく理解するために、以下のコードを走りました.
前提条件
以下のコードは、以下のディレクトリ構造と実行経路に基づいています.パスの実行に注意してください.これはjsファイルの所在経路と実行経路を区別するためであり、両者の区別はresolive方法をよりよく理解するのに役立つ.
ディレクトリ構造:
Part 4に
emm...ちょっと故障しているようですが、
Part 6は、
パスのセグメントは、完全な絶対パスを返すまで、右から左へ順にスティッチングします.もし入ってきたパスの断片にディスクが付いていないなら、運行時のパスを持ってきます.
path.join
パスの一部分は右から左へ順番につづり合わせて、スティッチングされたパスの一部分を返します.
締め括りをつける
両者の共通点:パスは標準化されます. は、右から左へのスティッチングパスのセグメント である.
両者の違い: Resoliveは絶対パスに戻ります.joinはパスフラグメントだけをつなぎ合わせます.
完全なテストコードを添付します.走ってみてください.
vueプロジェクトの配置でよく見られるpath.resove、path.join、_彼らは一体何ですか?公式表現は:
__dirname
は、現在のモジュールのディレクトリ名(すなわち、実行中のjsファイルがあるディレクトリ)を表しています.Node.jsモジュールシステムでは、各ファイルは独立したモジュールと見なされます.
path.resolve()
は、経路または経路フラグメントのシーケンスを絶対パスとして解析する.path.join()
は、与えられたすべてのパスを一緒に接続し(プラットフォーム固有のセパレータをデリミタとして使用する)、その後、生成されたパスを規範化する.ええ、ちょっと抽象的です.これらをよりよく理解するために、以下のコードを走りました.
前提条件
以下のコードは、以下のディレクトリ構造と実行経路に基づいています.パスの実行に注意してください.これはjsファイルの所在経路と実行経路を区別するためであり、両者の区別はresolive方法をよりよく理解するのに役立つ.
ディレクトリ構造:
myTest
├─ test1
│ └─ test.js
└─ test2
実行経路:E:\myTest\test2
Part 1これらは何ですか?直接出力してみますconst path = require('path');
console.log("__dirname ==> ", __dirname) // js ==> E:\myTest\test1
console.log("resolve ==> ", path.resolve('')) // ==> E:\myTest\test2
console.log("join ==> ", path.join('')) // . ==> .
Part 2は次にreolveとjoinを比較します.const path = require('path');
console.log("resolve ==> ", path.resolve('a/b','c','d')) // E:\myTest\test2\a\b\c\d
console.log("join ==> ", path.join('a/b','c','d')) // a\b\c\d
// , ( , \ /)
Part 3再添加料は、Part 2のコードに基づいて、経路セグメントd
にそれぞれ/
、./
、../
、/
を加えて試してみる.console.log(" /")
console.log("resolve ==> ", path.resolve('a/b','c','/d')) // E:\d
console.log("join ==> ", path.join('a/b','c','/d')) // a\b\c\d
console.log(" ./")
console.log("resolve ==> ", path.resolve('a/b','c','./d')) // E:\myTest\test2\a\b\c\d
console.log("join ==> ", path.join('a/b','c','./d')) // a\b\c\d
console.log(" ../")
console.log("resolve ==> ", path.resolve('a/b','c','../d')) // E:\myTest\test2\a\b\d
console.log("join ==> ", path.join('a/b','c','../d')) // a\b\d
./
、../
、__dirname
で始まるパスセグメントを含み、それぞれはルートディレクトリ(/)、カレントディレクトリ(./)、上位ディレクトリ(...).用法と命令行の中でcdを使うと何ですか?Part 4に
__dirname
を組み合わせて食べてPart 3に基づいて__dirname
を加えて第一パラメータとします.console.log(" /")
console.log("resolve ==> ", path.resolve(__dirname, 'a/b','c','/d')) // E:\d
console.log("join ==> ", path.join(__dirname, 'a/b','c','/d')) // E:\myTest\test1\a\b\c\d
console.log(" ./")
console.log("resolve ==> ", path.resolve(__dirname, 'a/b','c','./d')) // E:\myTest\test1\a\b\c\d
console.log("join ==> ", path.join(__dirname, 'a/b','c','./d')) // E:\myTest\test1\a\b\c\d
console.log(" ../")
console.log("resolve ==> ", path.resolve(__dirname, 'a/b','c','../d')) // E:\myTest\test1\a\b\d
console.log("join ==> ", path.join(__dirname, 'a/b','c','../d')) // E:\myTest\test1\a\b\d
Part 5は、ディスクを有するパスセグメントを追加して試しても、Part 3に基づいています.今回は__dirname
を追加せずに、ディスクを有するパスセグメントを追加します.console.log(" /")
console.log("resolve ==> ", path.resolve('F:/', 'a/b','c','/d')) // F:\d
console.log("join ==> ", path.join('F:/', 'a/b','c','/d')) // F:\a\b\c\d
console.log(" ./")
console.log("resolve ==> ", path.resolve('F:/', 'a/b','c','./d')) // F:\a\b\c\d
console.log("join ==> ", path.join('F:/', 'a/b','c','./d')) // F:\a\b\c\d
console.log(" ../")
console.log("resolve ==> ", path.resolve('F:/', 'a/b','c','../d')) // F:\a\b\d
console.log("join ==> ", path.join('F:/', 'a/b','c','../d')) // F:\a\b\d
上記の運転結果から、ポイントが見えます.パスに基づいて、パッチ後の絶対パスを返します.ただし、パスセグメントにディスクが含まれている場合は、そのディスクに準じる.emm...ちょっと故障しているようですが、
__dirname
とディスク付きのパスセグメントを同時に使用したら?それともトップパラメータとしてではないですか?もう一つ走ってみます.Part 6は、
__dirname
とディスクを有するパスセグメントとを同時に使用してトップパラメータとして使用しない場合console.log("resolve ==> ", path.resolve(__dirname, 'F:/', 'a/b','c')) // F:\a\b\c
console.log("resolve ==> ", path.resolve('F:/', __dirname, 'a/b','c')) // E:\myTest\test1\a\b\c
console.log("resolve ==> ", path.resolve('x/y', 'F:/', __dirname, 'a/b','c')) // E:\myTest\test1\a\b\c
はい、分かりました.より正確な表現を変更します.パスのセグメントは、完全な絶対パスを返すまで、右から左へ順にスティッチングします.もし入ってきたパスの断片にディスクが付いていないなら、運行時のパスを持ってきます.
path.join
パスの一部分は右から左へ順番につづり合わせて、スティッチングされたパスの一部分を返します.
締め括りをつける
両者の共通点:
両者の違い:
/
シンボルは、resoveにルートディレクトリを表し、joinにはこの効果がありません.完全なテストコードを添付します.走ってみてください.
const path = require('path');
// ?
console.log("----------------------------------")
console.log("__dirname ==> ", __dirname) // js ==> E:\myTest\test1
console.log("resolve ==> ", path.resolve('')) // ==> E:\myTest\test2
console.log("join ==> ", path.join('')) // . ==> .
console.log("----------------------------------")
// resolve join
console.log("resolve ==> ", path.resolve('a/b','c','d')) // E:\myTest\test2\a\b\c\d
console.log("join ==> ", path.join('a/b','c','d')) // a\b\c\d
// , ( , \ /)
console.log("----------------------------------")
// ----
// / ./ ../ , : (/), (./), (../)
// cd **
console.log("============ ============")
console.log(" /:")
console.log("resolve ==> ", path.resolve('a/b','c','/d')) // E:\d
console.log("join ==> ", path.join('a/b','c','/d')) // a\b\c\d
console.log("----------------------------------")
console.log(" ./:")
console.log("resolve ==> ", path.resolve('a/b','c','./d')) // E:\myTest\test2\a\b\c\d
console.log("join ==> ", path.join('a/b','c','./d')) // a\b\c\d
console.log("----------------------------------")
console.log(" ../:")
console.log("resolve ==> ", path.resolve('a/b','c','../d')) // E:\myTest\test2\a\b\d
console.log("join ==> ", path.join('a/b','c','../d')) // a\b\d
console.log("==================================")
// __dirname
console.log("========= __dirname =========")
console.log(" /:")
console.log("resolve ==> ", path.resolve(__dirname, 'a/b','c','/d')) // E:\d
console.log("join ==> ", path.join(__dirname, 'a/b','c','/d')) // E:\myTest\test1\a\b\c\d
console.log("----------------------------------")
console.log(" ./:")
console.log("resolve ==> ", path.resolve(__dirname, 'a/b','c','./d')) // E:\myTest\test1\a\b\c\d
console.log("join ==> ", path.join(__dirname, 'a/b','c','./d')) // E:\myTest\test1\a\b\c\d
console.log("----------------------------------")
console.log(" ../:")
console.log("resolve ==> ", path.resolve(__dirname, 'a/b','c','../d')) // E:\myTest\test1\a\b\d
console.log("join ==> ", path.join(__dirname, 'a/b','c','../d')) // E:\myTest\test1\a\b\d
console.log("----------------------------------")
// __dirname , ==> __dirname
console.log("========== ==========")
console.log(" /:")
console.log("resolve ==> ", path.resolve('F:/', 'a/b','c','/d')) // F:\d
console.log("join ==> ", path.join('F:/', 'a/b','c','/d')) // F:\a\b\c\d
console.log("----------------------------------")
console.log(" ./:")
console.log("resolve ==> ", path.resolve('F:/', 'a/b','c','./d')) // F:\a\b\c\d
console.log("join ==> ", path.join('F:/', 'a/b','c','./d')) // F:\a\b\c\d
console.log("----------------------------------")
console.log(" ../:")
console.log("resolve ==> ", path.resolve('F:/', 'a/b','c','../d')) // F:\a\b\d
console.log("join ==> ", path.join('F:/', 'a/b','c','../d')) // F:\a\b\d
console.log("----------------------------------")
// __dirname ,
console.log("========== ==========")
console.log("resolve ==> ", path.resolve(__dirname, 'F:/', 'a/b','c')) //F:\a\b\c
console.log("resolve ==> ", path.resolve('F:/', __dirname, 'a/b','c')) //E:\myTest\test1\a\b\c
console.log("resolve ==> ", path.resolve('x/y', 'F:/', __dirname, 'a/b','c')) //E:\myTest\test1\a\b\c