hysryt / wiki

https://hysryt.github.io/wiki/
0 stars 0 forks source link

Node.js #135

Open hysryt opened 4 years ago

hysryt commented 4 years ago

https://nodejs.org/

hysryt commented 4 years ago

モジュール

node では package.jsontype オプションによって *.js ファイルが ES モジュールか Common JS モジュールかを判別する。 typemodule を指定した場合、*.js ファイルは ES モジュールとして扱われる。 typecommonjs を指定した場合 *.js ファイルは CommonJS モジュールとして扱われる。 デフォルトは commonjs

また、拡張子が *.mjs であれば ES モジュール、*.cjs であれば CommonJS モジュールとして扱われる。

{
  ...
  "type": "module"
  ...
}

ES Modules

ES2015仕様において策定されたモジュールシステム。 node v12 時点では --experimental-modules フラグをつける必要がある。

import でモジュールのインポート、export でエクスポートを行う。 import および export はトップレベルで記述する必要がある。

hysryt commented 4 years ago

fs

https://nodejs.org/api/fs.html

ファイルシステムAPIを提供する。

ファイルの読み込み

readFileSync(path[, options])

ファイル全体を同期的に読み込む。 オプションにエンコーディングを指定した場合は文字列(string)として読み込み、指定しなかった場合はバイナリ(Buffer)として読み込む。

readline

https://nodejs.org/api/readline.html

読み込み可能ストリームから一行ずつデータを取得できるモジュール。 readline.createInterface() にストリームを渡す。

見た感じ非同期での読み込みしかできない?

stream

https://nodejs.org/api/stream.html

ストリームを操作するためのAPIを提供する。

hysryt commented 4 years ago

package.json

bin

https://docs.npmjs.com/files/package.json#bin

パッケージのCLIを作成する方法。 bin プロパティに記述したファイルに対して、グローバルインストール時には bin フォルダ、ローカルインストール時には ./node_modules/.bin フォルダ内にシンボリックリンクが設置される。

"bin": "./bin/cli.js"

と記述した場合、実行名はそのパッケージ名となる。

"bin": {
  "myapp": "./bin/cli.js"
}

と記述した場合、実行名は myapp となる。

ローカルインストールした場合は

npx 実行名

で実行できる。

グローバルインストールした場合はそのまま実行名で実行できる。

bin プロパティに記述したファイルの先頭には

#!/usr/bin/env

が必要。

hysryt commented 4 years ago

Stream

https://nodejs.org/api/stream.html

ストリーミングデータを操作するための抽象的なインターフェース。 全てのストリームは EventEmitter のインスタンス。

ストリームには4つのタイプが存在する。

ストリームは内部バッファにデータを保持する。 内部バッファは writable.writableBuffer または readable.readableBuffer で取得できる。

バッファリングされるデータの量は highWaterMark オプションに依存する。 highWaterMark にはバイト数(オブジェクトモードの場合はオブジェクトの総数)を指定する。

Readable ストリームの場合、stream.push(chunk) でストリームにデータが追加され、stream.read() が呼び出されるまで内部バッファにデータが残る。

内部バッファのデータ量が highWaterMark を超えると、データの読み取りが行われるまでデータの追加はストップする。

Writable ストリームの場合、stream.write(chunk) を呼び出すことでデータがバッファリングされる。内部バッファのデータ量が highWaterMark を超えると stream.write(chunk)false を返す。

Duplex ストリームと Transform ストリームは読み書きが可能なため、内部バッファを 2 つ保持する。

Readable ストリーム

Readable ストリームの例

全ての Readable ストリームは stream.Readable を実装する。

Readable ストリームからの読み込みにはフローモードとポーズモードの2つがある。 フローモードは、ストリームからのイベントを介してできるだけ速くデータを読み込む場合に用いる。 ポーズモードは stream.read() を明示的に呼び出してデータを読み込む。

全ての Readable ストリームはポーズモードで開始するが、以下のいずれかの方法でフローモードに切り替えることが可能。

以下のいずれかの方法でポーズモードに戻すことが可能