Node.jsのfsモジュールの概要
fs は、 File System の略で、Nodeで最も基本的で便利なモジュールの1つです。 この記事では、ファイルシステムを操作するための最も重要で便利な方法のいくつかについて説明します。
入門
もちろん、最初にNode.jsをインストールする必要があります。 あなたはそれをここで行うことができます。 幸いなことに、fsはNodeに付属している「すぐに使える」モジュールの1つであるため、すでに利用可能です。
const fs = require('fs');
同期vs非同期
すべてのfsメソッドには、同期バージョンと非同期バージョンの両方があり、同期フォームの名前はSyncで終わります。 したがって、非同期fs.writeFile()
はfs.writeFileSync()
になります。 もちろん、同期コードは、エラーが発生したときに後のコードの実行を停止しますが、コツをつかむのが簡単なので、この記事のすべての例では、同期形式を使用します。
基本操作
基本的なCRUD操作(作成、読み取り、更新、削除)は、3つの主要な機能だけで非常に簡単に実行できます。
fs.writeFileSync()
fs.readFileSync()
fs.unlinkSync()
fs.writeFileSync()
fs.writeFileSync()
は2つの引数のみを取ります。 新しいファイルの場所へのパス。これは、新しいファイルの名前と保存するデータで終わる必要があります。
gator.js
const gators = [{ type: 'cayman' }]; fs.writeFileSync('./swamp/cayman.json', JSON.stringify(gators));
結果:
swamp / cayman.json
[{"type":"cayman"}]
fs.writeFileSync()
はcayman.jsonのコンテンツを完全に書き換えているため、type: 'cayman'
をtype: 'croc'
に変更してファイルを再実行すると、cayman交換されます。 これは、大きなファイルを変更するときにパフォーマンスに重大な欠点をもたらす可能性があります。
fs.readFileSync()
デフォルトでは、すべてのデータは「バッファ」、つまり特別にエンコードされた数値の文字列として返されます。これを修正するには、2番目の引数として「utf8」を渡すだけです。
ここでは、cayman.json
が空の場合は空の配列を返し、存在する場合はデータを返します。
gator.js
const gators = [{ type: 'cayman' }]; const getData = () => { let data = fs.readFileSync('./swamp/cayman.json', 'utf8'); if (!data) return []; else { const file = JSON.parse(data); return file; } } const data = getData();
unlinkSync()
リンク解除は3つの中で最も単純で、削除するファイルまたはシンボリックリンクへのパスのみが必要です。
fs.unlinkSync('./swamp/cayman.json');
フォルダでのCRUD操作
上記の3つの方法には、ディレクトリ自体を操作するための独自の便利な対応方法があります。
fs.mkdirSync()
fs.rmdirSync()
fs.readdirSync()
fs.mkdirSync()
とfs.readdirSync()
の使用法は対応するファイルと同じであるため、代わりにfs.rmdirSync()
に付属する落とし穴を解決することにします。
rimraf vs fs.rmdirSync()
fs.rmdirSync()
を使用してフォルダを削除する際の主な問題は、空のディレクトリでのみ機能するという事実です。 ./swamp
を削除するためにそれを使用しようとすると、次のように返されます。
Error: ENOTEMPTY: directory not empty, rmdir './swamp'
これは明らかに私たちが望んでいることではありません。 残念ながら、Nodeには何らかの理由でこのためのネイティブソリューションがないため、他の場所を探す必要があります。
私が見つけた最も簡単な解決策は、 rimraf と呼ばれるnpmパッケージだったので、それをすばやくインストールしましょう。
$ npm i rimraf
構文は非常に似ていますが、fsの代わりにrimraf.sync()
(または非同期バージョンの場合はプレーンrimraf()
)を呼び出し、期待どおりにパスを渡す点が異なります。
const rimraf = require('rimraf'); rimraf.sync('./swamp');
結論
これらのいくつかの関数を使用すると、ファイルとそのデータを操作する一般的なユースケースの多くを処理できます。
新しいテクノロジーを紹介する場合は、ドキュメントへの紹介が義務付けられます(これは、実際に何かを探索するための最良の方法の1つです)。