Open hysryt opened 4 years ago
node では package.json
の type
オプションによって *.js
ファイルが ES モジュールか Common JS モジュールかを判別する。
type
に module
を指定した場合、*.js
ファイルは ES モジュールとして扱われる。
type
に commonjs
を指定した場合 *.js
ファイルは CommonJS モジュールとして扱われる。
デフォルトは commonjs
。
また、拡張子が *.mjs
であれば ES モジュール、*.cjs
であれば CommonJS モジュールとして扱われる。
{
...
"type": "module"
...
}
ES2015仕様において策定されたモジュールシステム。
node v12 時点では --experimental-modules
フラグをつける必要がある。
import
でモジュールのインポート、export
でエクスポートを行う。
import
および export
はトップレベルで記述する必要がある。
https://nodejs.org/api/fs.html
ファイルシステムAPIを提供する。
readFileSync(path[, options])
ファイル全体を同期的に読み込む。 オプションにエンコーディングを指定した場合は文字列(string)として読み込み、指定しなかった場合はバイナリ(Buffer)として読み込む。
https://nodejs.org/api/readline.html
読み込み可能ストリームから一行ずつデータを取得できるモジュール。
readline.createInterface()
にストリームを渡す。
見た感じ非同期での読み込みしかできない?
https://nodejs.org/api/stream.html
ストリームを操作するためのAPIを提供する。
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
が必要。
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 ストリームは stream.Readable を実装する。
Readable ストリームからの読み込みにはフローモードとポーズモードの2つがある。
フローモードは、ストリームからのイベントを介してできるだけ速くデータを読み込む場合に用いる。
ポーズモードは stream.read()
を明示的に呼び出してデータを読み込む。
全ての Readable ストリームはポーズモードで開始するが、以下のいずれかの方法でフローモードに切り替えることが可能。
stream.resume()
を呼び出すstream.pipe()
を呼び出して Writable ストリームにデータを送る以下のいずれかの方法でポーズモードに戻すことが可能
stream.pause()
を呼び出す(パイプを繋いでない場合のみ)stream.unpipe()
を呼び出す(パイプを繋いでいる場合のみ)
https://nodejs.org/