この記事では、主にnodejsのモジュール定義方法を紹介し、nodejsモジュールの原理、一般的なモジュール、および対応する定義方法をサンプルの形式で分析します。必要な友人はそれを参照してください
この記事の例では、モジュール定義について説明します。 Nodejsのメソッド。参考のために皆さんと共有してください。詳細は次のとおりです:
1. モジュール定義
nodejs のいわゆるモジュールはファイルです。 .js ファイルは、nodejs モジュールです。モジュールとファイルの間には 1 対 1 の対応があるため、参照されるモジュールは require('file path') になります。
例:
var circle = require('./circle.js'); console.log( 'The area of a circle of radius 4 is ' + circle.area(4));
これはfoo.js
var PI = Math.PI; exports.area = function (r) { return PI * r * r; }; exports.circumference = function (r) { return 2 * PI * r; };
これはcircle.jsという名前です
2つのjsコードファイルは同じフォルダーに配置されます。
他のフォルダーにあるモジュールを参照したい場合は、パスを直接記述してください。ここでのパス形式は Linux と同じです: /../../.js これは絶対パスで、../.js が上位層、./.js が現在のパスです。
ここで、exports と module.exports の違いに注意する必要があります。exports は、実際には module.exports への単なる参照です (a=2、b=a、b=c の場合、b は単に a を参照するだけです)。 b は a) を指しているわけではありません。これで公式 Web サイトの意味が理解できるようになります (exports のルートを関数として宣言したい場合、またはオブジェクトを生成したい場合は、代わりに module.exports を使用してください)エクスポート)
2 .循環参照
a.js:
console.log('a starting'); exports.done = false; var b = require('./b.js'); console.log('in a, b.done = %j', b.done); exports.done = true; console.log('a done');
b.js:
console.log('b starting'); exports.done = false; var a = require('./a.js'); console.log('in b, a.done = %j', a.done); exports.done = true; console.log('b done');
main.js:
console.log('main starting'); var a = require('./a.js'); var b = require('./b.js'); console.log('in main, a.done=%j, b.done=%j', a.done, b.done);
ほら、これは。 js は b とは異なります。2 つは相互に参照します。これにより無限ループが発生してしまうのでしょうか?いいえ、これは単に 1 つのモジュールがロードされていない、つまりモジュールの一部が利用できないというだけです。ここのように、最初にa.jsがロードされますが、a.jsのロード中にa.jsがb.jsをロードします。このとき、a.jsは停滞状態にあり、requireの前のデータのみがロードされます。 b.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
3. コアモジュール
いわゆるコアモジュールは、実際には、Java のパブリックパッケージと同じように、nodejs によって開発されたパブリックパッケージです。コアモジュールにアクセスするには、require('file name') するだけでアクセスできます。実際、パブリック モジュール パッケージは、nodejs によってインストールされた node_modulesnpmlib の下に配置されます。
4. ファイル モジュール
いわゆる参照に完全に一致するものがない場合、nodejs は最初に拡張子 .js、.json、次に .node を使用します。この .js ファイルは JavaScript ファイルです。 .json ファイルは json Format parsing と呼ばれ、.node は dlopen を使用して追加モジュールとしてロードされます
ここで、「/」や「./」などのシンボルの変更がない場合、モジュールはnode_modulesにロードされます。このファイルについては以下を参照してください。
5.node_modulesフォルダー
モジュールを参照するときに「/」「../」「./」のようなフォーマット記号修飾がない場合、検索方法は次のようになります。ファイルが「」にあると仮定します。 /home/ry/projects/foo.js'、require('bar.js')
を参照している場合、bar.js を見つける方法は次のとおりです: require('bar.js')
,那么这个bar.js寻找方式如下:
/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js
也就是从当前路基开始,一步一步向父目录添加node_modules文件夹作为模块地址。
require('example-module/path/to/file')
这种引用和require('bar.js')
是一样的解析。
6.以文件夹名字引用模块
大致分为两种:1)写package.json文件,此文件写在项目的根目录下,其形式如下:
{ "name" : "some-library", "main" : "./lib/some-library.js" }
这样写出来的require('./some-library')其真正的是
require('./some-library/lib/some-library.js')
2)直接约定好为index.js或index.node文件加载,同上的require,其加载可能如下:
./some-library/index.js
./some-library/index.node
7.缓存
一个模块的多次引用会只做一次加载。就像java中的static关键字修饰。不过要值得注意的是,当你require('foo')
/home/ry/node_modules/bar.js
/home/node_modules/bar.js/node_modules/bar.js
つまり、現在のロードベッドから開始して、node_modules フォルダーをモジュール アドレスとして親ディレクトリに段階的に追加します。 require('example-module/path/to/file')
この種の参照は、require('bar.js')
と同じように解析されます。
6. フォルダー名によるモジュールの参照
は大きく分けて2種類あります: 1) package.jsonファイルを書きます。このファイルは以下のような形式になります。
require('foo')
を指定した場合、この形式では必ずしも同じファイルが毎回参照されるとは限りません (異なるフォルダーで参照する可能性があるため)。 🎜🎜上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 🎜🎜関連する推奨事項: 🎜🎜🎜Node のクラスター モジュールについて学ぶ🎜🎜🎜🎜🎜Node.js での Angular の使用の概要🎜🎜🎜node.jsのfsモジュールをベースにしたシステムファイルとディレクトリの読み書き方法について
以上がNodejs でのモジュール定義の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。