この記事では、Node.js の Path モジュールを理解し、Path モジュールの使用法と一般的に使用される Path メソッドを紹介します。
Node.js path module は、オペレーティング システムに依存しない方法でファイル システム パスを操作するのに役立つ組み込みモジュールです。 OSX、Linux、および Windows をサポートする CLI ツールを構築する場合、Path モジュールは不可欠です。 [推奨学習: "nodejs チュートリアル "]
Linux 上でのみ実行されるバックエンド サービスを構築している場合でも、パス モジュールはパスを操作する際のエッジ ケースを回避するのに役立ちます。
以下では、パス モジュールを使用するための一般的なパターンと、パスを文字列に操作する代わりにパス モジュールを使用する必要がある理由について説明します。
Path モジュールで最も一般的に使用されるメソッドは、path.join()
です。このメソッドは、以下に示すように、1 つ以上のパス セグメントを文字列に結合します。
const path = require('path') path.join('/path', 'to', 'test.txt') // '/path/to/test.txt'
なぜ文字列連結の代わりに path.join()
メソッドを使用する必要があるのか疑問に思われるかもしれません。
'/path' + '/' + 'to' + '/' + 'test.txt' // '/path/to/test.txt' ['/path', 'to', 'test.txt'].join('/') // '/path/to/test.txt'
主な理由は 2 つあります:
/
) ではなくバックスラッシュ (\
) が使用されます。 path.join()
がこれを処理します。 Windows だけでなく、Linux や OSX でも path.join('data', 'test.txt')
は 'data/test.txt'
を返すためです。 path.join()
このメソッドは、次のように先頭と末尾のスラッシュを処理します。 path.join('data', 'test.txt') // 'data/test.txt' path.join('data', '/test.txt') // 'data/test.txt' path.join('data/', 'test.txt') // 'data/test.txt' path.join('data/', '/test.txt') // 'data/test.txt'
path.extname() メソッドはファイル拡張子を文字列として返します:
path.extname('/path/to/test.txt') // '.test'
. で終わる場合、
. が返されます。ファイルに拡張子がなく、
. で終わっていない場合、またはファイルに拡張子がない場合は、null 値が返されます。
path.extname('/path/to/index.') // '.' path.extname('/path/to/README') // '' path.extname('/path/to/.gitignore') // ''
path.basename() メソッドと
path.dirname() メソッドもあります。
path.basename('/path/to/test.txt') // 'test.txt' path.dirname('/path/to/test.txt') // '/path/to'
path.parse() このメソッドは、拡張子やディレクトリを含む 5 つの異なるコンポーネントに分割されたパスを含むオブジェクトを返します。
path.parse() このメソッドは、拡張子なしのファイル名を取得するメソッドでもあります。
path.parse('/path/to/test.txt') /* { root: '/', dir: '/path/to', base: 'test.txt', ext: '.txt', name: 'test' } */
path.join() や
path.extname のように使用します() このような方法は、ファイル パスを使用するほとんどのユースケースをカバーします。ただし、パス モジュールには、
path.relative() などのより高度なメソッドがいくつかあります。
path.relative(from, to) メソッドは、現在の作業ディレクトリに基づいて、
from から
to までの相対パスを返します。
from と
to が両方とも同じパスに解決される場合 (それぞれ
path.resolve() を呼び出した後)、長さ 0 の文字列が返されます。
// 返回相对于第一条路径的第二条路径的路径 path.relative('/app/views/home.html', '/app/layout/index.html') // '../../layout/index.html'
path.relative() メソッドは、あるディレクトリに対する相対パスが指定されているが、別のディレクトリに対する相対パスが必要な場合に便利です。たとえば、一般的なファイル システム監視ライブラリ
Chokidar は、監視対象ディレクトリへの相対パスを提供します。
const watcher = chokidar.watch('mydir') // 如果用户添加 mydir/path/to/test.txt,则会打印 mydir/path/to/test.txt watcher.on('add', path => console.log(path))
Chokidar ツールが頻繁に使用されます。たとえば、一般的な Gatsby または webpack も内部で path.relative() メソッドを使用します。
path.relative() メソッドを使用して、静的ファイル ディレクトリの同期を支援します。
export const syncStaticDir = (): void => { const staticDir = nodePath.join(process.cwd(), `static`) chokidar .watch(staticDir) .on(`add`, path => { const relativePath = nodePath.relative(staticDir, path) fs.copy(path, `${process.cwd()}/public/${relativePath}`) }) .on(`change`, path => { const relativePath = nodePath.relative(staticDir, path) fs.copy(path, `${process.cwd()}/public/${relativePath}`) }) }
main.js を
static ディレクトリに追加するとします。 Chokidar は、パスを
static/main.js に設定して
on('add') イベント ハンドラーを呼び出します。ただし、ファイルを
/public にコピーする場合、追加の
static/ は必要ありません。
path.relative('static', 'static/main.js')
static を基準とした相対的な
static/main.js を返します。
static の内容を
public にコピーするパス。
默认情况下,path 模块会根据 Node 进程运行的操作系统自动在 POSIX(OSX、Linux)和 Windows 模式之间切换。
但是,path 模块确实可以在 POSIX 上使用 Windows path 模块,反之亦然。path.posix
和 path.win32
属性分别包含 path 模块的 Posix 和 Windows 版本。
// 返回 'path\to\test.txt',与操作系统无关 path.win32.join('path', 'to', 'test.txt') // 返回 'path/to/test.txt',与操作系统无关 path.posix.join('path', 'to', 'test.txt')
在大多数情况下,根据检测到的操作系统自动切换 path 模块是正确的行为。但是,使用 path.posix
和 path.win32
属性对于总是希望输出 Windows 或 Linux 样式路径的测试或应用程序可能会有所帮助。
例如,一些应用程序使用 path.join()
和 path.extname()
等方法处理 URL 路径。
// 'https://api.mydomain.app/api/v2/me' 'https://api.mydomain.app/' + path.join('api', 'v2', 'me')
这种方法适用于 Linux 和 OSX,但如果有人试图将您的应用程序部署到一些无服务器上会发生什么?
你最终会得到 https://api.mydomain.app/api\v2\me
,这不是有效的 URL!如果使用 path 模块操作 URL,则应使用 path.posix
。
原文地址:https://juejin.cn/post/6997799224213504037
作者:lio_zero
更多编程相关知识,请访问:编程视频!!
以上がNode.js のパス モジュールと一般的なメソッドについての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。