Node.js v 10.1.0 Dcumentation
9502 ワード
Modules
Stable
Node.jsモジュールシステムでは、各ファイルは独立したモジュールとして扱われます.
メールにアクセスします
node.jsが直接実行するファイルは、
modulesは初めて読み込まれたときcacheに入れます.つまり、
Module Caching警告
moduleは彼らが解析されたファイル名に基づいてcacheにロードします.moduleはmoduleを起動する経路が異なるため、レスリングによって異なるファイル名を持つことができるので、同じ
コアModules
Node.jsにはいくつかのmoduleがバイナリファイルにコンパイルされています.これらのmoduleはNode.jsソースファイルに定義されています.
Cycles
File Modules
指定された名前の値段が見つからない場合、Node.jsは、ファイルの拡張子
Folders as Modules
programsとlibririesを一つの目次の下に組織して、一つの統一的な入り口を提供することをオススメします.このフォルダの名前をは、フォルダのルートディレクトリの下に は、入り口 は、入り口
Loading from /home/ry/project/node_modules/bar.js /home/ry/node_modules/bar.js /home/node_modules/bar.js /node_modules/bar.jsはまた、既知の経路のmoduleを参照として使用して、このmoduleに対する他のmoduleを検索することができる. Loading from the global folders
The module wrapper
moduleのコードが実行される前に、Node.jsは先にmoduleの中のコードをカプセル化します.は、globalオブジェクトの下ではなく、変数をこのmoduleに限定します. は、globalと似たようなオブジェクトを提供する.( The module scope
同前dirname(type:string)
Example:
Example:/Users/mjr/ap/a.js /Users/mjr/ap/node_modules/b/b.js exports
module(type:object)
現在module
require()(type:function)
依存moduleを呼び出します.
require.cache(type:object)
require法で呼び出されたすべての依存性はこのオブジェクトに格納されています.オブジェクトの中のあるキーが削除された場合、次回
require.extensions(廃棄)
require.main(type:object)
代表プログラム起動時の入り口module.
require.reolve(request[これはパラメータです]
require.reolve.paths(request[これもパラメータです]
あるmoduleが遍歴している経路情報を検索します.core moduleであれば、nullに戻ります.
The
ソースリンク
転載先:https://www.cnblogs.com/ArvinZhao/p/9067051.html
Stable
Node.jsモジュールシステムでは、各ファイルは独立したモジュールとして扱われます.
foo.js
という名前があると仮定する.const circle = require('./circle.js');
console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);
第1行目は、foo.js
に、同じフォルダの下のモジュールcircle.js
.・circle.js`の内容がロードされている.const { PI } = Math;
exports.area = (r) => PI * r ** 2;
exports.circumference = (r) => 2 * PI * r;
モジュールcircle.js
は、arear()
およびcircumfence()
の方法を露出している.方法およびオブジェクトは、この特殊なexports
オブジェクトに対して追加の属性値を付与することにより、モジュールのルートに追加される.モジュールのローカル変数は、Node.jsによってモジュールが一つの関数にカプセル化されるので、プライベートになります.この例では、変数PI
はcircle.js
に対してプライベートである.module.exports
属性は、関数またはオブジェクトのような新しい値を付与することができ、bar.js
は、square
モジュールを使用して、Square
クラスを導出する.const Square = require('./square.js');
const mySquare = new Square(2);
console.log(`The area of mySquare is ${mySquare.area()}`);
square
モジュールはsquare.js
で定義されている.// assigning to exports will not modify module, must use module.exports
module.exports = class Square {
constructor(width) {
this.width = width;
}
area() {
return this.width ** 2;
}
};
モジュールシステムはrequire('module')
モジュールで実装される.メールにアクセスします
node.jsが直接実行するファイルは、
require.main
がこのファイルのmoduleに設定されますので、require.main == module
を介して、現在のファイルがnode.jsによって直接実行されているかどうかを判断することができます.node *.js
は、1つのmodule
属性を提供するからである(通常はfilename
に等しい).現在のアプリケーションの入口は__filename
によって取得することができる.require.main.filename
require
方法を呼び出すと、require()
方法を用いて正確なファイル名を取得し、論理は以下の通りである.require(X) from module at path Y
1. If X is a core module,
a. return the core module
b. STOP
2. If X begins with '/'
a. set Y to be the filesystem root
3. If X begins with './' or '/' or '../'
a. LOAD_AS_FILE(Y + X)
b. LOAD_AS_DIRECTORY(Y + X)
4. LOAD_NODE_MODULES(X, dirname(Y))
5. THROW "not found"
LOAD_AS_FILE(X)
1. If X is a file, load X as JavaScript text. STOP
2. If X.js is a file, load X.js as JavaScript text. STOP
3. If X.json is a file, parse X.json to a JavaScript Object. STOP
4. If X.node is a file, load X.node as binary addon. STOP
LOAD_INDEX(X)
1. If X/index.js is a file, load X/index.js as JavaScript text. STOP
2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP
3. If X/index.node is a file, load X/index.node as binary addon. STOP
LOAD_AS_DIRECTORY(X)
1. If X/package.json is a file,
a. Parse X/package.json, and look for "main" field.
b. let M = X + (json main field)
c. LOAD_AS_FILE(M)
d. LOAD_INDEX(M)
2. LOAD_INDEX(X)
LOAD_NODE_MODULES(X, START)
1. let DIRS=NODE_MODULES_PATHS(START)
2. for each DIR in DIRS:
a. LOAD_AS_FILE(DIR/X)
b. LOAD_AS_DIRECTORY(DIR/X)
NODE_MODULES_PATHS(START)
1. let PARTS = path split(START)
2. let I = count of PARTS - 1
3. let DIRS = []
4. while I >= 0,
a. if PARTS[I] = "node_modules" CONTINUE
b. DIR = path join(PARTS[0 .. I] + "node_modules")
c. DIRS = DIRS + DIR
d. let I = I - 1
5. return DIRS
Cachingmodulesは初めて読み込まれたときcacheに入れます.つまり、
require.resolve()
を呼び出すたびに、同じファイルが解析されると、同じリターンオブジェクトが得られる.もし一つのmoduleに何度もコードを実行させたいなら、exportは一つのfunctionを使って、そのfunctionを呼び出します.Module Caching警告
moduleは彼らが解析されたファイル名に基づいてcacheにロードします.moduleはmoduleを起動する経路が異なるため、レスリングによって異なるファイル名を持つことができるので、同じ
require('foo')
を呼び出すたびに同じオブジェクトに戻ることは保証されない.大きさの書き込みに敏感なファイルシステムやオペレーティングシステムは、たとえmoduleが同じファイルとして解析されても、大きさのために何度もマウントされます.コアModules
Node.jsにはいくつかのmoduleがバイナリファイルにコンパイルされています.これらのmoduleはNode.jsソースファイルに定義されています.
require(module)
ディレクトリの下にあります.Core Moduleはcacheにプリロードされています.lib/
は内蔵のHTTP moduleを呼び出します.たとえ現在のディレクトリの下にhttpというファイルがありますとしても.Cycles
require('http')
:console.log('a starting');
exports.done = false;
const b = require('./b.js');
console.log('in a, b.done = %j', b.done);
exports.done = true;
console.log('a done');
a.js
:console.log('b starting');
exports.done = false;
const a = require('./a.js');
console.log('in b, a.done = %j', a.done);
exports.done = true;
console.log('b done');
b.js
:console.log('main starting');
const a = require('./a.js');
const b = require('./b.js');
console.log('in main, a.done = %j, b.done = %j', a.done, b.done);
main.js
:$ node main.js
main starting
a starting
b starting
in b, a.done = false
b done
in a, b.done = true
a done
in main, a.done = true, b.done = true
無限ループを防止するために、output
unfinished copyはa.js
に戻ります.File Modules
指定された名前の値段が見つからない場合、Node.jsは、ファイルの拡張子
b.js
を追加しようと試み、.js
、.json
が見つかりませんでした..node
に戻ります.Folders as Modules
programsとlibririesを一つの目次の下に組織して、一つの統一的な入り口を提供することをオススメします.このフォルダの名前を
MODULE_NOT_FOUND
メソッドのパラメータとして伝えることができる3つの方法があります.require()
のファイルを作成し、package.json
mduleを指定します.{
"name" : "some-library",
"main" : "./lib/some-library.js"
}
main
のファイルを作成します.index.js
のファイルを作成します.Loading from
index.node
Foldersnode_modules
に伝達されたmodule名が一つのcore moduleではなく、require()
、'/'
、'../'
を開始としていない場合、Node.jsは、'./'
ディレクトリの下から必要なmoduleを検索することを試みる.例えば、''/home/ry/projects/foo.js'呼び出しnode_modules
があり、node.jsは以下のように順次検索される.require('bar.js')
に指定されたmoduleがまだ見つからない場合、Node.jsは、システム環境変数bar.js
によって指定されたディレクトリを検索する.もちろん、前提はこの環境変数を設定しています.壁裂は、node_modules
ディレクトリの下に関連するmoduleを置くことを推奨しています.このようにロードすると、より速く安定します.The module wrapper
moduleのコードが実行される前に、Node.jsは先にmoduleの中のコードをカプセル化します.
(function(exports, require, module, __filename, __dirname) {
// Module code actually lives in here
});
このようにするメリットは:NODE_PATH
、'require node_modules
、'u dirname`)同前dirname(type:string)
Example:
export
from ,'module','__filename
を実行します.console.log(__dirname);
// Prints: /Users/mjr
console.log(path.dirname(__filename));
// Prints: /Users/mjr
同前filename(type:string)Example:
node example.js
from /Users/mjr
を実行します.console.log(__filename);
// Prints: /Users/mjr/example.js
console.log(__dirname);
// Prints: /Users/mjr
二つのファイルa.jsとb.jsを与えられました.a.jsはb.jsに依存しています.次のような構造があります.node example.js
に等しい.module(type:object)
現在module
require()(type:function)
依存moduleを呼び出します.
require.cache(type:object)
require法で呼び出されたすべての依存性はこのオブジェクトに格納されています.オブジェクトの中のあるキーが削除された場合、次回
/Users/mjr
メソッドを呼び出すと、このmoduleが再ロードされます.しかしこの方法はnative addonsを適用しない.require.extensions(廃棄)
require.main(type:object)
代表プログラム起動時の入り口module.
require.reolve(request[これはパラメータです]
module.exoports
のメカニズムを使用して、あるmoduleのパスを検索したが、解決されたfilenameだけに戻り、このmoduleをロードしない.require.reolve.paths(request[これもパラメータです]
あるmoduleが遍歴している経路情報を検索します.core moduleであれば、nullに戻ります.
The
require()
Objectrequire
:現在のmoduleのすべての依存項module
:あるクラスのインスタンス(exportは不可)を付与するために使用されてもよい.module.children
:const EventEmitter = require('events');
module.exports = new EventEmitter();
// Do some work, and after some time emit
// the 'ready' event from the module itself.
setTimeout(() => {
module.exports.emit('ready');
}, 1000);
module.exports
:const a = require('./a');
a.on('ready', () => {
console.log('module "a" is ready');
});
割り当て操作はすぐに完了する必要があります.掉中に完了してはいけません.以下のコードは有効ではないです.a.js
:setTimeout(() => {
module.exports = { a: 'hello' };
}, 0);
b.js
:const x = require('./x');
console.log(x.a);
他の属性x.js
:全ファイル名y.js
:module識別子は通常、全ファイル名module.filename
である.moduleがロードされているかどうかmodule.id
.最初にこのmoduleを呼び出すmodule module.loaded
.検索パスmodule.parent
:module外調用requireの方法.ソースリンク
転載先:https://www.cnblogs.com/ArvinZhao/p/9067051.html