ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js のパス モジュールと一般的なメソッドについての簡単な説明

Node.js のパス モジュールと一般的なメソッドについての簡単な説明

青灯夜游
青灯夜游転載
2021-08-24 10:28:522850ブラウズ

この記事では、Node.js の Path モジュールを理解し、Path モジュールの使用法と一般的に使用される Path メソッドを紹介します。

Node.js のパス モジュールと一般的なメソッドについての簡単な説明

Node.js path module は、オペレーティング システムに依存しない方法でファイル システム パスを操作するのに役立つ組み込みモジュールです。 OSX、Linux、および Windows をサポートする CLI ツールを構築する場合、Path モジュールは不可欠です。 [推奨学習: "nodejs チュートリアル "]

Linux 上でのみ実行されるバックエンド サービスを構築している場合でも、パス モジュールはパスを操作する際のエッジ ケースを回避するのに役立ちます。

以下では、パス モジュールを使用するための一般的なパターンと、パスを文字列に操作する代わりにパス モジュールを使用する必要がある理由について説明します。

Node での Path モジュールの使用

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 つあります:

  • Windows サポートのため 。 Windows では、パス区切り文字としてスラッシュ (/) ではなくバックスラッシュ (\) が使用されます。 path.join() がこれを処理します。 Windows だけでなく、Linux や OSX でも path.join('data', 'test.txt')'data/test.txt' を返すためです。
  • エッジケースの処理用。ファイル システム パスを使用する場合、多くの特殊なケースが発生します。たとえば、2 つのパスを手動で連結しようとすると、誤ってパス区切り文字が重複してしまう可能性があります。 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 メソッド

#path モジュールには、ファイル拡張子やディレクトリなどのパス コンポーネントを抽出するためのメソッドもいくつかあります。

path.extname() メソッドはファイル拡張子を文字列として返します:

path.extname('/path/to/test.txt') // '.test'

2 つのパスを連結するのと同じように、取得されるファイル拡張子は最初に表示されるよりも小さくなります。複雑。

パスが

. で終わる場合、. が返されます。ファイルに拡張子がなく、. で終わっていない場合、またはファイルに拡張子がない場合は、null 値が返されます。

path.extname('/path/to/index.') // '.'

path.extname('/path/to/README') // ''

path.extname('/path/to/.gitignore') // ''

path モジュールには、ファイル名 (拡張子を含む) とディレクトリをそれぞれ取得する

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.relative()

path.join()path.extname のように使用します() このような方法は、ファイル パスを使用するほとんどのユースケースをカバーします。ただし、パス モジュールには、path.relative() などのより高度なメソッドがいくつかあります。

path.relative(from, to) メソッドは、現在の作業ディレクトリに基づいて、from から to までの相対パスを返します。 fromto が両方とも同じパスに解決される場合 (それぞれ 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() メソッドを使用します。

たとえば、Gatsby は

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.jsstatic ディレクトリに追加するとします。 Chokidar は、パスを static/main.js に設定して on('add') イベント ハンドラーを呼び出します。ただし、ファイルを /public にコピーする場合、追加の static/ は必要ありません。

Call

path.relative('static', 'static/main.js') static を基準とした相対的な static/main.js を返します。 static の内容を public にコピーするパス。

跨操作系统路径和 URL

默认情况下,path 模块会根据 Node 进程运行的操作系统自动在 POSIX(OSX、Linux)和 Windows 模式之间切换。

但是,path 模块确实可以在 POSIX 上使用 Windows path 模块,反之亦然。path.posixpath.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.posixpath.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 サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。