NodeJs学習ノート01--エントリーモジュール、グローバルオブジェクト

5434 ワード

一、どのように運行するか
2つの方法があります.1つは、nodeを入力してコマンドインタラクティブモードに入り、コード文を入力してすぐに実行することです.-もう1つは、ファイルディレクトリに入り、node+ファイル名でファイルを実行する一般的な方法です.
二、モジュール
各モジュールを記述する際には、require、exports、moduleの3つの予め定義された変数が使用されます.
  • require requireは、現在のモジュールに他のモジュールをロードおよび使用するために使用される.モジュール名は、相対パス(./で始まる)または絶対パス(/またはC:などのディスクで始まる)を使用できます.また、モジュール名の.js拡張子は省略できます.検索順:ファイル名->.js->.json->.node
  • var foo1 = require('./foo'); 
    var foo2 = require('./foo.js');  
    var foo3 = require('/home/user/foo'); 
    var foo4 = require('/home/user/foo.js');
  • exports exportsオブジェクトは、現在のモジュールのエクスポートオブジェクトであり、モジュールの共通メソッドと属性をエクスポートするために使用されます.他のモジュールがrequire関数で現在のモジュールを使用する場合に得られるのが、現在のモジュールのexportsオブジェクトです.次の例では、共通の方法を導出します.
  • exports.hello = function () {     
        console.log('Hello World!'); 
    };
  • moduleは、moduleオブジェクトを介して現在のモジュールに関するいくつかの関連情報にアクセスできますが、最も多くの用途は、現在のモジュールのエクスポートオブジェクトを置き換えることです.たとえば、モジュールエクスポートオブジェクトのデフォルトは通常のオブジェクトですが、関数に変更する場合は、次の方法を使用します.
  • module.exports = function () {     
        console.log('Hello World!'); 
    }; 

    以上のコードでは、モジュールのデフォルトのエクスポートオブジェクトが関数に置き換えられます.
    三、モジュール初期化
    1つのモジュールのJSコードは、モジュールが初めて使用されたときにのみ実行され、実行中にモジュールのエクスポートオブジェクトが初期化されます.その後、キャッシュされたエクスポートオブジェクトが再利用される.
    counter.jsの内容は次のとおりです.
    var i = 0;  
    function count() {     
        return ++i; 
    }  
    exports.count = count;

    メインモジュールmain.jsの内容は次のとおりです.
    var counter1 = require('./counter'); 
    var counter2 = require('./counter');   
    console.log(counter1.count()); 
    console.log(counter2.count()); 
    console.log(counter2.count()); 

    プログラムを実行した結果は次のとおりです.
    $ node main.js 
    1 
    2
    3 

    counter.jsはrequireに2回初期化されたために2回も初期化されていないことがわかります.
    四、グローバルオブジェクト-global
    1つのモジュールでvarによって定義された変数は、その役割ドメイン範囲が現在のモジュールであり、外部から直接アクセスできない.1つのモジュールが別のモジュールで定義された変数にアクセスできると思う場合は、1.変数をglobalオブジェクトの属性として使用することができるが、このような方法は2.モジュールオブジェクトmoduleを使用することを推奨する.
    global.a = 100;
    var a = 100;
    module.exports.a = a;

    module:現在のモジュールに関する情報を保存します.
    このmoduleオブジェクトには、サブオブジェクトがあります.exportsオブジェクトは、モジュール内のローカル変数オブジェクトにアクセスできます.
    五、グローバルオブジェクト-filename、dirname
  • __filenameは、現在のモジュールファイルの解析後の絶対パスを返します.このプロパティは、実際にはグローバルではなく、モジュールの役割ドメインの下にあります.
  • __dirnameは、現在のモジュールファイルが存在するディレクトリの解析後の絶対パスを返します.このプロパティもグローバルではなく、モジュールの役割ドメインの下にあります.

  • 六、グローバルオブジェクト-process
    このオブジェクトのプロパティとメソッドにより、現在実行されているプログラムプロセスを制御できます.
    process.argv:最初の要素は「node」、2番目の要素は.Jsファイルの名前になります.次の要素は、コマンドラインが入力するパラメータの順です.
    process.pid:現在のプロセスのPID
    process.version:コンパイル時にバージョン情報を格納する内蔵変数NODE_VERSIONのプロパティ.
    process.versions:nodeが格納され、パケットバージョン情報に依存する属性が露出します.
    Process.title:Getter/setterの「ps」に表示されるプロセス名を取得/設定します.
    プロセス.exit:プロセスが終了するとトリガーされます.これは、ユニットテストなどのモジュールの状態を固定時間にチェックする良いタイミングです.「exit」のコールバックが終了すると、プライマリ・イベント・ループは実行されなくなり、タイマも無効になります.
    process.stdin:標準入力ストリーム(stdin)を指す読み取り可能なストリーム(Readable Stream).標準入力ストリームのデフォルトは一時停止(pause)なので、process.stdin.resume()を呼び出して受信を復元する必要があります.
    process.stdout:標準出力ストリーム(stdout)を指す書き込み可能なストリーム(Writable Stream).
    function Log(data) {
        process.stdout.write(data);
    }
    Log('  ');