Node.js のプロセス、パス、ファイル システム モジュールの一般的に使用される API の詳細な説明
この記事では、Nodejs のプロセス、パス、およびファイル システム モジュールの一般的に使用される API を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
関連する推奨事項: 「nodejs チュートリアル 」
Node を日常の開発に使用する場合、いくつかのファイル システムを使用することになります。パス操作などの API は、誰もが理解しやすく直接使用できるようにここにまとめられています。
ここでは、すべてではなく、最も一般的に使用されるもののみを紹介します。より包括的な情報が必要な場合は、公式ドキュメントを参照してください。
ナンセンスな話をしたり、より多くのコードを書いたりしないようにしてください。
プロセス モジュール
最初に、現在のノード プロセスに関連するグローバル環境情報を提供するプロセス モジュールを紹介します。後の API で使用されます。
// 内置模块,直接使用 const process = require('process');
process.cwd()
これは、現在のノード プロセスが実行されるディレクトリを返す関数です。一般的な例を次に示します。シナリオ:
A ノード モジュール A
が NPM を通じて公開され、モジュール A
がプロジェクト B
で使用されます。 A
の B
プロジェクト配下のファイルを操作する必要がある場合、process.cwd()
を使用して B
プロジェクトのパスを取得できます。 。
const cwd = process.cwd(); // 输出:/Users/xiaolian/Code/node-api-test
process.argv
ターミナルがノードを介してコマンドを実行すると、受信コマンド ライン パラメーターは process.argv
を介して取得できます。戻り値は配列です。
- 0: ノードのパス (通常は使用されません。無視してください)
- 1: 実行された JS ファイルのパス (通常は使用されません。無視してください) ) )
- 2~n: 実際の受信コマンドのパラメータ**
したがって、process.argv[2]## から取得するだけで済みます。 # 。
これは一般的に使用されます :
const args = process.argv.slice(2);
process.env
現在の環境に関連するすべての情報を格納するオブジェクトを返しますが、直接使用されることはほとんどありません。 通常、現在の環境を識別するために、process.env にいくつかの変数をマウントします。たとえば、最も一般的な使用法は、
development と
production を区別するための
process.env.NODE_ENV です。
vue-cli のソース コードでは、現在のモードが
DEBUG であるかどうかを示す
process.env.VUE_CLI_DEBUG がよく見られます。
DefinePlugin です。毎日のビルド プロセスでは、このプラグインをよく使用して、さまざまなグローバル変数を挿入してさまざまなビルド プロセスを実行します。 process.env.xxx は特定の値に置き換えられ、deadCode はコード サイズを最適化するために Terser 圧縮段階で削除されます。
process.platform
これはあまり使用されません。現在のシステム情報を返します。列挙値は次のとおりです:console.log(process.platform); // 'aix' // 'darwin' - macOS // 'freebsd' // 'linux' - linux // 'openbsd' // 'sunos' // 'win32' - windows
Path module
// 内置模块,直接使用 const path = require('path');
Node のほぼ
パス関連の操作でこのモジュールが使用されます。
最もよく使用される 5 つは次のとおりです:path.join(...paths)
path.joinこの機能は、複数の入力パスを完全なパスに結合することです。
const dPath = path.join('template', 'aaa', 'bbb', 'ccc', 'd.js'); // 输出: template/aaa/bbb/ccc/d.js
const pkgPath = path.join(process.cwd(), './package.json'); // 输出: /Users/xiaolian/Code/node-api-test/package.json
path。 join
['package.json', 'README.md'].forEach(fileName => { const templateFilePath = path.join(process.cwd(), 'template', fileName); console.log(templateFilePath); }); // 输出: /Users/xiaolian/Code/node-api-test/template/package.json // 输出: /Users/xiaolian/Code/node-api-test/template/README.md
path.resolve(...paths)
path.resovle のように、任意の数のパスを渡すことができます。 と
path.join の違いは、その機能が複数の受信パスと現在の実行パスを完全な絶対パスに結合することであることです。
index.js が
scripts ディレクトリにあり、ルート ディレクトリで
node scripts/index.js を実行するとします。コードは次のとおりです。
const dPath = path.resolve('aaa', 'bbb', 'ccc', 'd.js'); // 输出: /Users/xiaolian/Code/node-api-test/aaa/bbb/ccc/d.js
path.resolve の最初のパラメータが
./ の場合、直接理解して
path を実行できます。 . join(processs.cwd(), '') は一貫して動作します。
path.basename(path[, ext])
path.basename 指定された
path# の最後のパス名を返します。 ## 。2 番目のパラメータ ext
はオプションで、ファイル拡張子を表します。例: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>console.log(path.basename(&#39;scripts/index.js&#39;)); // index.js
console.log(path.basename(&#39;scripts/index.js&#39;, &#39;.js&#39;)); // 匹配到 .js,返回 index
console.log(path.basename(&#39;scripts/index.js&#39;, &#39;.json&#39;)); // 没匹配到,返回 index.js</pre><div class="contentsignin">ログイン後にコピー</div></div>
は
path.basename に対応し、指定された ## の最後のものを返します。 #path パス名の前のパス。例えば:###<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>console.log(path.basename(&#39;scripts/index.js&#39;)); // scripts
console.log(path.basename(&#39;scripts/hook/index.js&#39;)); // scripts/hook</pre><div class="contentsignin">ログイン後にコピー</div></div><h3 id="strong-path-extname-path-strong"><strong>path.extname(path)</strong></h3><p>和 <code>path.basename
对应,返回指定 path
最后一个路径名的文件扩展名(含小数点 .
)。比如:
console.log(path.basename('scripts/index.js')); // .js console.log(path.basename('README.md')); // .md
对比
最后再来对比一下各个路径相关的 API 的区别。
项目 A
的目录结构如下:
├── scripts │ └── index.js ├── src │ └── index.js ├── package.json ├── README.md
scripts/index.js
的代码如下:
const path = require('path'); console.log(path.join('package.json')); console.log(path.resolve('package.json')); console.log(path.join('src', 'index.js')); console.log(path.resolve('src', 'index.js')); console.log(path.join(process.cwd(), 'package.json')); console.log(path.resolve('./', 'package.json')); console.log(__filename); console.log(__dirname);
然后,我们在项目 A
的跟目录下执行 node scripts/index.js
,结果如下:
-> node scripts/index.js package.json /Users/xiaolian/Code/A/package.json src/index.js /Users/xiaolian/Code/A/src/index.js /Users/xiaolian/Code/A/package.json /Users/xiaolian/Code/A/package.json /Users/xiaolian/Code/A/scripts/index.js /Users/xiaolian/Code/A/scripts
品,仔细品,它们有什么区别。
个人而言,一般还是习惯用 path.join(process.cwd(), 'xxx')
。
File System 模块
// 内置模块,直接使用 const fs = require('fs');
文件系统相关操作的模块,除了 fs
之外,我们还经常用到 fs-extra
,后面会介绍。
这个模块在平时的 Node 开发中会被大量使用,这里简单列几个,其它的还是看文档哈:nodejs.org/dist/latest…
fs
模块的 API 默认都是异步回调的形式,如果你想使用同步的方法,有两种解决方法:
- 使用 Node 提供的同步 API:
xxxSync
,也就是在 API 的后面加一个Sync
后缀,它就是一个同步方法了(具体还是需要查文档哈,是否有提供同步 API) - 包装成一个 Promise 使用
fs.stat(path[, options], callback)
fs.stat()
返回一个文件或者目录的信息。
const fs = require('fs'); fs.stat('a.js', function(err, stats) { console.log(stats); });
其中包含的参数有很多,介绍几个比较常用的:
export interface StatsBase<T> { isFile(): boolean; // 判断是否是一个文件 isDirectory(): boolean; // 判断是否一个目录 size: T; // 大小(字节数) atime: Date; // 访问时间 mtime: Date; // 上次文件内容修改时间 ctime: Date; // 上次文件状态改变时间 birthtime: Date; // 创建时间 }
一般我们会使用 fs.stat
来取文件的大小,做一些判断逻辑,比如发布的时候可以检测文件大小是否符合规范。在 CLI 中,经常需要获取一个路径下的所有文件,这时候也需要使用 fs.stat
来判断是目录还是文件,如果是目录则继续递归。当然,现在也有更方便的 API 可以完成这个工作。
同步方法
const fs = require('fs'); try { const stats = fs.statSync('a.js'); } catch(e) {}
fs.readdir(path[, options], callback)
fs.readdir(path)
获取 path
目录下的文件和目录,返回值为一个包含 file
和 directory
的数组。
假设当前目录为:
. ├── a │ ├── a.js │ └── b │ └── b.js ├── index.js └── package.json
执行以下代码:
const fs = require('fs'); fs.readdir(process.cwd(), function (error, files) { if (!error) { console.log(files); } });
返回值为:
[ 'a', 'index.js', 'package.json' ]
可以看到这里只返回了根目录下的文件和目录,并没有去深度遍历。所以如果需要获取所有文件名,就需要自己实现递归。
同步方法
const fs = require('fs'); try { const dirs = fs.readdirSync(process.cwd()); } catch(e) {}
fs.readFile(path[, options], callback)
文件读取的 API,通过 fs.readFile
可以获取指定 path
的文件内容。
入参如下:
- 第一个参数: 文件路径
- 第二个参数: 配置对象,包括
encoding
和flag
,也可以直接传如encoding
字符串 - 第三个参数: 回调函数
使用方法如下:
const fs = require('fs'); const path = require('path'); fs.readFile(path.join(process.cwd(), 'package.json'), 'utf-8', function ( error, content ) { if (!error) { console.log(content); } });
如果没传 encoding
,则其默认值为 null
,此时返回的文件内容为 Buffer
格式。
同步方法
const fs = require('fs'); try { fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf-8'); } catch(e) {}
fs.writeFile(file, data[, options], callback)
对应着读文件 readFile
,fs
也提供了写文件的 API writeFile
,接收四个参数:
- 第一个参数: 待写入的文件路径
- 第二个参数: 待写入的文件内容
- 第三个参数: 配置对象,包括
encoding
和flag
,也可以直接传如encoding
字符串 - 第三个参数: 回调函数
使用方法如下:
const fs = require('fs'); const path = require('path'); fs.writeFile( path.join(process.cwd(), 'result.js'), 'console.log("Hello World")', function (error, content) { console.log(error); } );
同步方法
const fs = require('fs'); const path = require('path'); try { fs.writeFileSync( path.join(process.cwd(), 'result.js'), 'console.log("Hello World")', 'utf-8' ); } catch (e) {}
本文主要是总结了一下在开发 Node 时常用的一些 API,后续的文章会带来 Node 常用的一些三方包。
更多编程相关知识,请访问:编程视频!!
以上がNode.js のプロセス、パス、ファイル システム モジュールの一般的に使用される API の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Linux システムで PATH 環境変数を設定する方法 Linux システムでは、PATH 環境変数を使用して、システムがコマンド ラインで実行可能ファイルを検索するパスを指定します。 PATH 環境変数を正しく設定すると、任意の場所でシステム コマンドやカスタム コマンドを実行できるようになります。この記事では、Linux システムで PATH 環境変数を設定する方法と詳細なコード例を紹介します。現在の PATH 環境変数を表示する ターミナルで次のコマンドを実行して、現在の PATH 環境変数を表示します: echo$P

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

Nodejs実行可能ファイルをpkgでパッケージ化するにはどうすればよいですか?次の記事では、pkg を使用して Node プロジェクトを実行可能ファイルにパッケージ化する方法を紹介します。
