NodeJS入門4-モジュールシステム
7008 ワード
このブログはCSNDとGithubでアクセスできます.
githubのブログアドレスを添付します.
Githubでは現在、JSの深いシリーズ読後感、NodeJSシリーズがあります.興味があれば、starを使ってみてもいいです.もちろん表現が間違っていたり、はっきりしないところがあれば、早速メッセージを残してください.私達はお互いに検討して、一緒に進歩します.
モジュールシステム
コンピュータプログラムの開発過程では、プログラムコードの書き込みが多くなるにつれて、ファイル内のコードはますます長くなり、維持が難しくなります.
保守可能なコードを作成するために、私達は多くの関数をグループ化して、それぞれ異なるファイルに入れます.このように、各ファイルに含まれるコードは比較的少ないです.多くのプログラミング言語はこのような組織コードの方式を採用しています.Node環境の中で、一つ.jsファイルをモジュールと呼びます.
モジュールを使うメリットは何ですか?
最大の利点は、コードのメンテナンス性を大幅に向上させることです.次に、コードの作成はゼロから開始する必要がない.モジュールの作成が終わったら、他のところから引用されます.私たちはプログラムを作る時に、Node内蔵のモジュールと第三者からのモジュールを含めて、他のモジュールもよく引用します.
Nodeでは、モジュールは三つに分けられます.の有名なコアモジュール、例えば:fs、httpなど. ユーザが自分で作成したファイルモジュール(JSファイル). サード・モジュール. art-template npmでダウンロードした Nodeにはグローバルスコープがありません.モジュールのスコープだけがあります.外部は内部にアクセスできず、内部は外部にアクセスできない. 読み込みはファイルモジュールをロードし、コードを実行します. は、ロードされたファイルモジュールから導き出されたインターフェースオブジェクトを取得する. requireの相対パスはは、拡張子名 を省略することができる.相対パスはファイル名だけを書くと、Nodeはモジュール、グローバルモジュール、および現在のモジュールの下で モジュール名は正しく書かれていますか? モジュールファイルが存在しますか? 相対パスは正しいかどうか. requireローディング規則
まず例を見てみます.
mainファイルはaとbファイルを導入して、aファイルはbファイルのため、mainファイルの実行結果は何ですか?
結果は実行順序 aファイルを導入し、aファイルは出力consoneを実行し、bファイルを導入して出力します. 私達はbファイルを導入しました.この時、Nodeはすでにbをロードしたことを発見しました.キャッシュがあるかどうか確認してみます.優先的にキャッシュからロードします.重複して実行しません. は、その中のインターフェースオブジェクトを取得する. このようにする目的. は、重複したローディングを回避し、モジュールローディング効率を向上させる. 判定モジュール識別子 コアモジュール サードパーティモジュール 自分で書いた ソリューション 彼がコアモジュールではないなら、パス形式でロードします. パス形式のモジュール判定 ./現在のディレクトリ(省略不可)…/前のディレクトリ(省略不可) js拡張子名は、 を省略することができます.
コアモジュールであれば、(コアモジュールはすでにバイナリファイルに入っています.直接参照します.) 第三者モジュールの場合、彼の検索規則は次の通りです. は、まずnpmでダウンロードする必要があります. 使用時にrequire('art-template')によってロードされます. 1.現在のファイルの下のnode_を先に見つけます.modulesは「art-template」フォルダを探しています. .node_を開く.modules/art-template/package.jsonは、main属性が指すファイルを探しています. .index.jsファイルは実際の実行ファイルです. もしmain内にエントリモジュールが指定されていない、またはpackage.jsonが存在しない場合、nodeは自動的にディレクトリのindex.jsファイルを探しに行きます. 以上の条件が成立しないと、一級上のnode_に進みます.modulesディレクトリを再検索します. は、現在のルートディレクトリが見つからないまで、エラー 私達は一つのプロジェクトがあります.一つのnode_しかありません.modulesはプロジェクトのルートディレクトリに置いて、すべてのサブディレクトリが第三者のパッケージを参照できるようにします. エクスポート Nodeは、モジュールのスコープであり、デフォルトファイルのすべてのメンバは、現在のファイルで有効であることを意味する. すべてのファイルモジュールには、一つのオブジェクトが提供されています. は、アクセスしたいモジュールのメンバについて、 第一の方法(複数のメンバーをエクスポート)
答えは否定的であり、この時また第二の導出(暴露)方法を引き出した.
第二の方法(例えば、文字列、関数)
あるモジュールが直接にメンバを導き出す必要がある場合、マウントの方式ではなく、
私も初めてNodeに接触したので、サービスにも初めて接触しました.各モジュールには一つのmoduleオブジェクト があります. moduleオブジェクトの一つにexportオブジェクト があります.私たちは、導出すべきメンバーをmodule.exportインターフェースオブジェクトにマウントすることができます. の最初のマウント方式 というメンバーを提供しています. は、モジュールが単一のメンバを導出する必要がある場合には、 を使用しなければならないことに注意してください. もしそうしたいなら、これを追加して引用関係を再構築してもいいです.
たとえば:
githubのブログアドレスを添付します.
Githubでは現在、JSの深いシリーズ読後感、NodeJSシリーズがあります.興味があれば、starを使ってみてもいいです.もちろん表現が間違っていたり、はっきりしないところがあれば、早速メッセージを残してください.私達はお互いに検討して、一緒に進歩します.
モジュールシステム
コンピュータプログラムの開発過程では、プログラムコードの書き込みが多くなるにつれて、ファイル内のコードはますます長くなり、維持が難しくなります.
保守可能なコードを作成するために、私達は多くの関数をグループ化して、それぞれ異なるファイルに入れます.このように、各ファイルに含まれるコードは比較的少ないです.多くのプログラミング言語はこのような組織コードの方式を採用しています.Node環境の中で、一つ.jsファイルをモジュールと呼びます.
モジュールを使うメリットは何ですか?
最大の利点は、コードのメンテナンス性を大幅に向上させることです.次に、コードの作成はゼロから開始する必要がない.モジュールの作成が終わったら、他のところから引用されます.私たちはプログラムを作る時に、Node内蔵のモジュールと第三者からのモジュールを含めて、他のモジュールもよく引用します.
Nodeでは、モジュールは三つに分けられます.
var = require(' ')
二つの役割:./
を追加しなければならないので、省略できません.hello.js
を順次検索します.エラーが発生する可能性があります.module.js
throw err;
^
Error: Cannot find module 'hello'
at Function.Module._resolveFilename**
at Function.Module._load
...
at Function.Module._load
at Function.Module.runMain
このエラーにあったら、チェックしてください.まず例を見てみます.
mainファイルはaとbファイルを導入して、aファイルはbファイルのため、mainファイルの実行結果は何ですか?
結果は
a b
という原因は何ですか?can not find module xxx
を報告します.exports
.これはデフォルトの空のオブジェクトです.exports
インターフェースオブジェクトにマウントする必要がある(属性となる).exports.foo = 123;
exports.add = function (x, y) {
return x + y;
};
exports.c = 'hello';
exports.d = {name: 'jace',age : 21}
ここには特殊なところがあります.aだけbの声明の関数addをもらいたいなら、bの中にexports = add
と書いてもいいですか?答えは否定的であり、この時また第二の導出(暴露)方法を引き出した.
第二の方法(例えば、文字列、関数)
あるモジュールが直接にメンバを導き出す必要がある場合、マウントの方式ではなく、
module.exports = add
の方式を使用しなければならない.module.exports = add;
ご注意ください以下の場合は****を上書きします.module.exports = 'hello';
module.exports = function(){} //
exportsとmodule.exportsの違い私も初めてNodeに接触したので、サービスにも初めて接触しました.
module.exports.xxx = xxx
は面倒くさいです.Nodeは開発者のための配慮で各モジュールにexports
exports === module.exports
リセットmodule.exports = xxx
の方式exports = xxx
このような方法は無効です.exportsはmodule.exportsの引用にすぎません.exportsの割り当ては最終結果に影響がありません.たとえば:
module.exports = {
a: 123
}//
exports = module.exports // ( ) // exports = {a: 123, foo: bar}
exports.foo = 'bar // ( )
次の5 npmとpackage.jsonをクリックしてください.