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つの引数のみを取ります。 新しいファイルの場所へのパス。これは、新しいファイルの名前と保存するデータで終わる必要があります。
const gators = [{
type: 'cayman'
}];
fs.writeFileSync('./swamp/cayman.json', JSON.stringify(gators));
結果:
[{"type":"cayman"}]
それを念頭に置いて fs.writeFileSync()
cayman.json のコンテンツを完全に書き換えているため、変更した場合 type: 'cayman'
に type: 'croc'
ファイルを再実行すると、ケイマンが置き換えられます。 これは、大きなファイルを変更するときにパフォーマンスに重大な欠点をもたらす可能性があります。
fs.readFileSync()
デフォルトでは、すべてのデータは「バッファ」、つまり特別にエンコードされた数値の文字列として返されます。これを修正するには、2番目の引数として「utf8」を渡すだけです。
ここでは、次の場合に空の配列を返します。 cayman.json
空であり、存在する場合はデータを返します。
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つです)。