モジュール性とは何ですか?ノードのモジュール化の詳細な分析

PHPz
リリース: 2023-03-22 18:42:30
転載
1094 人が閲覧しました

モジュール性とは何ですか?この記事では、ノードのモジュール化について詳しく説明します。お役に立てれば幸いです。

モジュール性とは何ですか?ノードのモジュール化の詳細な分析

モジュール性とは

モジュール化とは、複雑な問題を解決することを指します。問題は、システムを上から下まで層ごとに複数のモジュールに分割するプロセスです。モジュールは、システム全体において、組み合わせ、分解、交換が可能なユニットです。

上記の定義は少し曖昧です。簡単な例を挙げましょう: 子どもの頃に遊んだ Bully ゲーム コンソールです。ゲームに飽きたとき、私たちはゲームをプレイすることは不可能です。ゲーム機を直接置き換えることができ、ゲームベルトを交換することで様々なゲームを体験することができます。この形式はモジュール化です。

はゲームを小さなモジュールに分割し、必要なときに取り出して挿入するだけで使用できます。 [関連するチュートリアルの推奨事項: nodejs ビデオ チュートリアル プログラミング教育 ]

プログラミングにおけるモジュール化は、実際には

固定ルール に従います。大きなファイルを 独立および 依存する複数の小さなモジュールに分割します。

#コード モジュール分割の利点:

コード モジュールの
    再利用性が向上しました。コード
  1. コードの保守性の向上
  2. オンデマンドで実装可能 読み込み
  3. (これは本当に使いやすいです!)
##モジュール仕様

モジュール仕様は、コードを分割したり組み合わせたりするときに従う必要があるルールです。モジュラー方式。

例: ?1. モジュールの参照に使用される構文形式

?2. モジュールで使用される構文形式

メンバーを外部に公開する
モジュール仕様の利点: 誰もが同じモジュール仕様に準拠してコードを作成できるため、通信コストが削減され、さまざまなモジュール間の相互呼び出しが大幅に容易になり、他のユーザーにも利益をもたらしますそしてあなた自身。 (
Heima Ge の要約は実際に適切です )

node.js でのモジュール分類

Node.js に基づくモジュールのソースに応じて、モジュールは次の 3 つの主要カテゴリに分類されます: ? 1. 組み込みモジュール (組み込みモジュールは、Node.js によって公式に提供されます。 fs、パス、http など)

? 2.

カスタム モジュール
(ユーザーが作成したすべての .js ファイルはカスタム モジュールです) ? 3. サードパーティ モジュール
(サードパーティによって提供されます。開発されたモジュールは、公式に提供される組み込みモジュールでも、ユーザーが作成したカスタム モジュールでもありません。使用する前にダウンロードする必要があります)
上記の記事では一般的に使用される組み込みモジュールについて説明し、残りは次のとおりです。以下の 2 つのモジュールには比較的機能がなく、開発者のニーズに大きく依存します。

#モジュールのロード

##強力な require() メソッドを使用するを使用すると、必要な 組み込みモジュール、ユーザー定義モジュール、サードパーティ モジュール をロードして使用できます。

注:

require() メソッドを使用してロードする場合他のモジュールの場合、モジュールが実行されます。モジュールにコード をロードします。

#node.js のモジュール スコープ

モジュール スコープ ドメインとは

# は関数スコープに似ています。カスタム モジュールで定義された変数、メソッド、およびその他のメンバーは、現在のモジュール内でのみアクセスできます。 このモジュール-レベルのアクセス制限はモジュールスコープと呼ばれます。

コード例:

//在模块作用域中定义常量 nameconst name = 'qianmo'//在模块作用域中定义函数sing()function sing() {
    console.log(`大家好,我是${name}`);}
ログイン後にコピー
//在测试js文件中加载模块const a = require('./08.模块作用域')console.log(a);  // {}
ログイン後にコピー
上記のコードでは、モジュール スコープで定数とメソッドを定義しましたが、テスト後の JS では定数とメソッドを定義しました。ファイルにモジュールをロードして印刷すると、印刷された内容は 空のオブジェクト
であることがわかりました。これは、モジュール スコープ内のプロパティとメソッドがプライベート メンバーであり、モジュールのロード時にアクセスできないためです。

#モジュール スコープの利点

モジュール スコープの利点は実際には 1 つだけです:

グローバル変数汚染の問題を防ぐ上記のコードでは、2 つの js ファイルを導入しました。

変数は同時に js ファイルで定義されます。 a

、a を出力すると、出力された内容は zs であることがわかります。ここで問題が見つかります。

2.js

ファイルが モジュール性とは何ですか?ノードのモジュール化の詳細な分析1.js を上書きします。

、これは問題を反映しています。グローバル変数を定義すると、変数汚染を引き起こしやすくなります。ノードのモジュール化は、この問題の解決に役立ちます!

向外共享模块作用域中的成员

module对象

在每个 .js 自定义模块中都有一个 module 对象,它里面存储了和当前模块有关的信息

我们打印一下module,console.log(module)

モジュール性とは何ですか?ノードのモジュール化の詳細な分析

module.exports对象

在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用
外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象

代码示例:

// 在默认情况下 module.exports = {}const age = 20//向 module.exports 对象上挂载 name 属性module.exports.name = '正式'//向 module.exports 对象上挂载 sing 方法module.exports.sing = function() {
    console.log('hello');}module.exports.age = age//让 module.exports 指向一个全新的对象module.exports = {
    username : 'qianmo',
    hi() {
        console.log('你好啊!');
    }}
ログイン後にコピー
// 在外界使用require 导入一个自定义模块的时候 得到的成员。// 就是 那个模块中,通过 module.exports 指向的那个对象const m1 = require('./11.自定义模块')console.log(m1); // { username: 'qianmo', hi: [Function: hi] }
ログイン後にコピー

在测试js文件中,我们打印了引入的模块,发现打印出来了module.exports最后指定的对象
注意:使用 require() 方法导入模块时,导入的结果,永远以 module.exports 指向的对象为准。

exports对象

由于 module.exports 单词写起来比较复杂,为了简化向外共享成员的代码,Node 提供了 exports 对象默认情况下,exports 和 module.exports 指向同一个对象。最终共享的结果,还是以 module.exports 指向的对象为准

代码示例:

console.log(exports); // {}console.log(module.exports); // {}console.log(exports === module.exports); // true
ログイン後にコピー

在我们进行对exports对象解析之前,我们需要确定一下exportsmodule.exports是不是指向的是一个对象,我们可以看出,最后打印出了true,说明exportsmodule.exports指向的是一个对象!

const username = 'zs'exports.username = username
exports.age = 20exports.sayHello = function() {
    console.log('大家好!');}//最终向外共享的结果,永远是 module.exports 所指向的对象
ログイン後にコピー
const m = require('./13.exports对象')console.log(m); //{ username: 'zs', age: 20, sayHello: [Function (anonymous)] }
ログイン後にコピー

在上述的代码中,我们在私有模块中定义了属性和方法,我们通过exports将属性和方法导出,在测试文件中引入,我们会发现,测试文件中打印出了属性和方法。

exports 和 module.exports 的使用误区

时刻谨记,使用require() 引入模块时,得到的永远是module.exports 指向的对象

モジュール性とは何ですか?ノードのモジュール化の詳細な分析

  1. 在第一个图中,module.exports指向一个新对象,所以在测试文件中,只会打印出来{gender:'男',age:22}
  2. 在第二个图中,虽然exports指向了一个新对象,但是我们知道我们只会打印出来module.exports指向的对象,所以我们只能打印出来一个属性{username : 'zs'}
  3. 在第三个图中,exports和module.exports都没有指定一个新对象,我们还知道,在默认情况下exports和module.exports指向的是一个对象,所以最终打印出来{username : 'zs',gender:'男'}
  4. 在第四个图中,exports指向了一个新对象,但是最终这个对象又赋值给了module.exports,所以,最后打印出了{username:'zs',gender:'男',age:22}

? 注意 : 不要在一个文件中同时使用exportsmodule.exports,防止混淆

Node.js 中的模块化规范(commonJS)

Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性各模块之间如何相互依赖

CommonJS 规定:
① 每个模块内部,module 变量代表当前模块
② module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口
加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块。

小结

模块化是node.js最大的特点,在前端的项目开发中,模块化已经成为了必不可少的部分,我们在vue中使用的组件化其实就是模块化的概念,前端只要学透了模块化,那么你的函数封装能力,按需调用的能力将会大大提升,这样的话将会极大限度的提升你的项目开发效率。

ノード関連の知識の詳細については、nodejs チュートリアル を参照してください。

以上がモジュール性とは何ですか?ノードのモジュール化の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!