CommonJSは二つのバージョン1.0および1.1に分けます。
CommmonJS 1.0
-
モジュールのコンテキスト
- モジュールでは、自由変数「がある必要」機能
- 「rquire」機能は、モジュール識別子を取ります。
- 「Rquire外部モジュール出力への」復帰API。
- 閉ループ依存(IF 依存サイクルが)、その外部モジュールが依存送信される(推移依存)として必要この場合の実行は、「いつ完了されないことが必要」コールに加えて少なくともモジュールを含まなければならない返されたオブジェクト必要機能はすでに準備ができて出力される前に。
- 要求は、モジュールを返すことができない場合は、「必要」エラーをスローする必要があります。
- モジュールでは、「と呼ばれるものがある輸出」自由変数は、それがオブジェクトモジュールでの実装ではそれ自体がAPIにそれらに加えます。
- モジュールは、「使用しなければならない輸出のみオブジェクト表現出力として」。
- モジュールでは、自由変数「がある必要」機能
-
モジュール識別子
- モジュールの識別子は、スラッシュ「によって分離されている利用規約その文字列」。
- 用語は、こぶスタイルの識別子で、または「」または「...」必要があります
- モジュール識別子は、ファイル名の拡張子を省略することができます。例えば、「の.js」
- モジュール識別子は、相対パス(であってもよい相対)または絶対パス(最上位)。モジュール識別子の先頭には、「」または「..」このモジュール識別子は、相対パスがある場合。
- 絶対パスは、名前空間のルートモジュールでなければなりません。
- 相対パスは、現在の相対なければならない必要がモジュール。
-
指定なし
規制しない能力の重要な一環として、相互運用性のためにこの仕様を:- モジュールは、データベース、ファイルシステムやファクトリ関数によって保存することができ、または内部リンクライブラリを介して交換することができるかどうか。
- モジュールローダがサポートするかどうかをPATHの解析モジュール識別子に使用する変数を。
-
ユニットテスト
- Google Codeのでユニットテスト クリス・コワルにより、
- ユニットテストのGitミラー アッシュベルリンことで
-
サンプルコード
-
math.js
exports.add = function(){ var sum = 0 , i = 0 , args = arguments , 1 = args.length; while(i < 1){ sum += args[i++]; } return sum; };
-
increment.js
var add = require('math').add; exports.increment = function(val){ return add(val,1); };
-
program.js
var inc = require('increment').increment; var a = 1; inc(a); //2
-
CommonJS 1.1
CommonJS 1.1および1.0は、主にモジュールの文脈で(比較Module1のコンテキスト)一部仕様を追加します。
- モジュールのコンテキスト
- モジュールでは、自由変数「がある必要」機能
- 「rquire」機能は、モジュール識別子を取ります。
- 「Rquire外部モジュール出力への」復帰API。
- 閉ループ依存(IF 依存サイクルが)、その外部モジュールが依存送信される(推移依存)として必要この場合の実行は、「いつ完了されないことが必要」コールに加えて少なくともモジュールを含まなければならない返されたオブジェクト必要機能はすでに準備ができて出力される前に。
- 要求は、モジュールを返すことができない場合は、「必要」エラーをスローする必要があります。
- 必要読み取り専用、削除することはできません「メイン」属性を。「主な」プログラムのルートディレクトリに相当しますモジュール。この属性が設定されている場合、それはルートディレクトリである必要がありますモジュールの同じオブジェクトをポイントします。
- 必要最低優先度に最も高い優先順位を持つパスの配列であるがパスプロパティを、パス月モジュールのルートディレクトリに戻ってきました。
- パスのプロパティは、サンドボックスに存在しません。
- すべてのモジュールにパスにおける属性と同じ値をポイント。
- パスは交換することはできません。
- ときのパス属性が存在する場合、変更パスコンテンツのモジュールが適切に検索することができない可能性があります。
- 場合パスの属性が存在する場合、それは部分的にしか含まれていてもよいパスを前またはモジュールがロードされた後にこれらのパスを使用する場合、他のパスにチェックを、。
- ときのパス属性が存在する場合、それがロードされたモジュールが可能にあるパスの標準化の基礎を。
- モジュールでは、「と呼ばれるものがある輸出」自由変数は、それがオブジェクトモジュールでの実装ではそれ自体がAPIにそれらに加えます。
- モジュールがなければなりません輸出輸出オブジェクトへの唯一のツールとして。
- モジュールは、「使用しなければならない輸出のみオブジェクト表現出力として」。
- モジュールオブジェクトは、システムは、id属性を削除することはできませんしました。行うとき(module.id)を必要とし、IDは、対応を介して見ることができるモジュールとリターンモジュール輸出オブジェクト。
- 作成する場合は、モジュールをするとき持つことができるオブジェクトのURI属性を。この属性は、ソースファイルモジュールに対応する点。URIは、サンドボックスに存在しません。
- モジュールでは、自由変数「がある必要」機能
します。https://www.jianshu.com/p/d8b4dceae966
************************************************** ********分割ライン**************************************** ******************
Node.jsのトップレベルのグローバルスコープとは異なるブラウザ、ブラウザでグローバルネームスペースオブジェクトのグローバルである、トップレベルのスコープはグローバルスコープであり、および範囲内のNode.js。
ない、実際にグローバル変数変数のように見えます
それは世界的なように見えますが、実際にはないので、モジュールだけの範囲内に存在するいくつかの変数は、これらの変数の全ては、モジュールで使用可能です。
- __dirname
- __ファイル名
- 輸出
- モジュール
- 必要とする()
バッファ・クラス(バッファ)
使用。バッファ(「バッファ」)必要とせずに、バッファクラスは、グローバル変数である
バイトストリームを処理し、TCPストリームやファイルシステム操作のためのバッファのシーンクラスを。
同様のクラスバッファ整数配列のサイズの例は、V8は、物理メモリヒープの外側を割り当て、固定されています。バッファサイズは、作成時に決定され、変更することはできません。
バッファを効率的JSに格納することができるバイナリデータの8バイトの配列です。
API
Buffer.from(array)
戻り値はBuffer
、入ってくるバイト配列のコピーが含まれています。Buffer.from(arrayBuffer[, byteOffset [, length]])
リターンBuffer
、着信ArrayBuffer
共有メモリ。Buffer.from(buffer)
リターンBuffer
の着信含むBuffer
コンテンツのコピーを。Buffer.from(string[, encoding])
戻り値はBuffer
、渡された文字列のコピーが含まれています。Buffer.alloc(size[, fill[, encoding]])
指定されたサイズと、初期化を返しますBuffer
。よりこの方法Buffer.allocUnsafe(size)
も遅いが、それは、新しく作成されたことを確認することができBuffer
、古いデータは含まれません。Buffer.allocUnsafe(size)
そして、Buffer.allocUnsafeSlow(size)
指定したサイズが、初期化されていないが返されますBuffer
。なぜならBuffer
、それが初期化されず、古いデータが含まれていてもよいです。
ケース:
//创建一个长度为10,用0填充的Buffer
const buf1 = Buffer.alloc(10);
console.log(buf1);
//创建一个长度为10,用01填充的Buffer
const buf2 = Buffer.alloc(10,1);
console.log(buf2);
//创建一个长度为10,用a的utf8编码填充的Buffer
const buf21 = Buffer.alloc(10,'a');
console.log(buf21);
//创建一个长度为11,用aGVsbG8gd29ybGQ=的base64编码填充的Buffer
const buf22 = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
console.log(buf22);
//创建一个长度为10,没有初始化的Buffer
// 这个方法比调用 Buffer.alloc() 更快,但返回的 Buffer 实例可能包含旧数据,因此需要使用 fill() 或 write() 重写。
const buf3 = Buffer.allocUnsafe(10);
console.log(buf3);
// 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);
console.log(buf4);
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');
console.log(buf5);
// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');
console.log(buf6);
戻り値:
リターン構造
初期化、使用--zeroフィル・バッファのコマンドラインオプション
あなたは通常、初期化が必要なバッファを作成するときにセキュリティ上の理由から、あなたは使用することができます--zero-fill-buffers
ゼロで埋め、今後の値を初期化、初期化するためのコマンドラインオプションを。
使用--zero-fill-buffers
コマンドラインオプション、new Buffer(size)
、Buffer.allocUnsafe()
、Buffer.allocUnsafeSlow()
またはnew SlowBuffer(size)
リターンをBuffer
作成して夜12時00分で満たされます
$ node --zero-fill-buffers
> Buffer.allocUnsafe(5);
<Buffer 00 00 00 00 00>
初期バッファ
注:お問い合わせの際Buffer.allocUnsafe()
とBuffer.allocUnsafeSlow()
、割り当てられたメモリが初期化されていないとき(ゼロで満たされていません)。
この割り当ての迅速メモリが、割り当てられたメモリは、古いデータが含まれているかもしれないが、メモリを書き換えていない場合は、バッファを読んで、彼らは古いデータの漏洩を行います。
文字コード
バッファが堆積したり、文字列を引き抜かれるときは、文字エンコーディングを指定する必要がある
のNode.jsは、文字エンコーディングをサポート:
- 「ASCII」 - サポートのみ7ビットのASCIIデータ。
- 「UTF8」 - マルチバイトのUnicode文字。
- 「Utf16le」 - 2または4バイト、リトルエンディアンエンコードされたUnicode文字。プロキシのサポート(U + 10FFFFにU + 10000)。
- 'UCS2' - 'utf16le' の別名。
- 'Base64で' - Base64エンコーディング。
- 「Latin1の」 - バッファは、シングルバイトエンコードされた文字列としてエンコードされました。
- 'バイナリ' - 'latin1の' エイリアス。
- 「Hexが」 - 各バイトは2つの16進文字として符号化されます。
タイマー(タイマー)
タイマータイマーモジュールが機能し、グローバル露光の数を定義し、タイマ機能は、グローバル変数は、呼び出しAPIを使用するように(「タイマー」)を必要としない、です。
同様のWebブラウザを達成するためのタイマ機能でのNode.jsとタイマーAPIのAPIを提供していますが、(に基づいて、異なる内部実装使用Node.jsのイベントループ構造を)。
即時クラス
以下からのsetImmediate()
リターンパスclearImmediate()
をキャンセル。
- setImmediate(コールバック[、...引数]):コールバックI / Oイベントの直後に実行予定のコールバック。複数の呼び出しsetImmediate()する場合、コールバック関数は、それらが実行のためにキューイングされ作成された順序に従います。
- (即時)clearImmediateは:キャンセル
setImmediate()
の作成Immediate
オブジェクトを。
タイムアウトクラス
このオブジェクトはとから、内部的に作成されるsetTimeout()
とsetInterval()
リターン。それは、渡すことができるclearTimeout()
か、clearInterval()
計画された操作をキャンセルします
-
setInterval(コールバック、遅延[、...引数]):ミリ秒の遅延が繰り返し実行される毎に所定のコールバック
-
setTimeoutメソッド(コールバック、遅延[、...引数]):delayミリ秒後に所定のコールバックの1回の実行。それは正確にミリ秒単位でのコールバックの時間遅延を呼び出すことはできません。Node.jsのは、コールバックがトリガされた正確な時間を保証する、またその順序を保証するものではありません。コールバックは、指定した時刻に近いとも呼ばれます。
-
clearInterval(タイムアウト):キャンセル
setInterval()
の作成Timeout
オブジェクトを。 -
clearTimeout(タイムアウト):キャンセル
setTimeout()
の作成Timeout
オブジェクトを
コンソール
コンソールモジュールは、Webブラウザ、コンソール派生クラス(含まにconsole.log()、console.error()とconsole.warn()メソッドなど)、グローバルに提供するJavaScriptコンソールと同様の単純なデバッグコンソールを提供しますコンソールの例は、書き込みするように構成されているprocess.stdout
とprocess.stderr
。使用を呼び出さずにrequire('console')
。
console.assert(値[、...メッセージ])
シンプルなアサーションテストを検証するために使用されvalue
、それが真であるかどうか。そうでない場合は、記録Assertion failed
。提供されている場合message
、パラメータの使用により、すべての受信メッセージをutil.format()
フォーマットエラーメッセージを。出力は、エラーメッセージとして使用されています。
console.clear()
console.clear()オペレーションは、特定のオペレーティング・システムと端末タイプに応じて変えることができます。Linuxオペレーティングシステム、明確なシェルコマンドと同様のconsole.clear()操作のほとんどのために。Windowsでは、console.clearは()Node.jsのバイナリで唯一の電流出力端子のビューをクリアします。
console.error([データ] [、...引数])
改行によって標準エラー出力に印刷します。
console.info([データ] [、...引数])
console.log([データ] [、...引数])
console.table(するTabularData [プロパティ])
テーブルを構築し、それを記録する行の属性とするTabularDataするTabularData(またはプロパティ)を用いたカラム
console.table([{ a: 1, b: 'Y' }, { a: 'Z', b: 2 }]);
出力:
console.table
console.time([ラベル])
操作の継続時間を計算するためのタイマーを起動します。ユニークなことでタイマーlabel
の識別子。起動するとconsole.timeEnd()
、同じを使用することができるlabel
ミリ秒単位で、タイマーを停止する、との出力の期間stdout
。サブミリ秒の持続時間に正確なタイマー。
console.timeEnd([ラベル])
以前の呼び出しによって停止console.time()
開始タイマーを、との結果を印刷stdout
console.time('100-elements');
for (let i = 0; i < 100; i++) {}
console.timeEnd('100-elements');
出力:
console.time
処理する
プロセスオブジェクトは、現在のNode.jsプロセスに関する情報を提供し、それを制御するために、グローバル変数です。()を必要とせずに使用してグローバル変数として。
オブジェクトがいるプロセスEventEmitter
のインスタンス
持つEventEmitter(持つEventEmitterクラス):投光器は、(トリガ、(もトリガーと呼ばれ、エミッタである、)特定のタイプのオブジェクトが存在している非同期イベント駆動型アーキテクチャを構築するための最もNode.jsのコアAPI関数を呼び出すために名付けられたイベントをトリガしたことを示し)リスナーと呼ばれます。オブジェクト上記プロセスがトリガーされ、それはリスナーといえます。
すべてのオブジェクトは、イベントのトリガすることができますEventEmitter
クラスのインスタンスを。これらのオブジェクトは持っているeventEmitter.on()
というイベントに1つまたは複数の機能を結合するために使用される機能を。イベント名は通常、名前のラクダ。
プロセスは、イベントという名前のいくつかのオブジェクトに対処するように設定します:
- 「BeforeExit」イベント:Node.jsのは、そのイベントループを空にして配置する他の仕事がないときは、「beforeExit」イベントがトリガされます
- 「EXIT」のイベント:呼び出しのNode.jsのプロセス場合は
process.exit()
、時間やイベントループは終了します終了し、「終了」イベントがトリガされます
process.on('exit', (code) => {
console.log(`退出码: ${code}`);
});
「終了」イベントリスナーを呼び出した後、Node.jsのプロセスはまだイベントループにキューイングにつながった他の作業が放棄され、その結果、すぐに終了します
- 「メッセージ」イベント:あなたはIPCチャネルを使用している場合に限り、子は親プロセス受けるよう、Node.jsのプロセスを派生
childprocess.send()
メッセージを送信し、それが引き金となり'message'
、イベントを - 「警告」イベント:アラームトリガー「警告」イベントのNode.jsの任意の時間を発行する処理
process.on('warning', (warning) => {
console.warn(warning.name); // 打印告警名称
console.warn(warning.message); // 打印告警信息
console.warn(warning.stack); // 打印堆栈信息
});
プロセスといくつかのプロパティまたはメソッド(一部のみを記録)。
- process.argv:Node.jsのプロセスを開始し、着信コマンドラインパラメータ含む配列
- process.config:JavaScriptオブジェクト。このオブジェクトは現在のプログラムのNode.jsの実装に関わる情報をコンパイルするために使用される設定項目を説明し
- process.env:ユーザーの環境を含むオブジェクト
- process.abort():プロセスすぐのNode.jsの終わり
- process.exit([コード])状態を終了するため
code
のNode.jsを同時に処理を終了示します。省略された場合code
、コードの使用の成功0
またはprocess.exitCode
(提供される場合)の値が終了します。すべての呼び出し'exit'
イベントリスナーの前に、Node.jsのは終了しません。 - process.killで(PID [、信号])信号は、PIDによって識別されるプロセスに送られます。
- process.send(メッセージ[、sendHandle [、オプション]] [、コールバック): プロセスは、プロセス間通信を介して生成されたのNode.jsである場合、次に、process.send()メソッドは、親プロセスにメッセージを送信するために使用することができます。受信されたメッセージは、の親とみなされている
ChildProcess
上のターゲット'message'
イベント。
します。https://www.jianshu.com/p/407ec209024c