1. 程式人生 > 其它 >node基礎中的模組化介紹以及exports和module.exports詳解

node基礎中的模組化介紹以及exports和module.exports詳解

技術標籤:nodenodejs

模組化(定義)

  1. 在Node中,一個js檔案就是一個模組。
  2. 在Node中,一個js檔案中的js程式碼都是獨立執行在一個函式中的,不是全域性作用域。所以一個模組中的變數和函式在其他模組中無法訪問。
console.log("我是一個模組,我是01.module.js");

模組的引入

  1. 在node中,通過require()函式可以引入外部的模組
  2. require()可以傳遞一個檔案的路徑作為引數,node將會自動根據該路徑來引入外部模組。這裡路徑,如果使用相對路徑,必須以.或…開頭
  3. 使用require()引入模組以後,該函式會返回一個物件,這個物件代表的是引入的模組
  4. 我們使用require()引入模組以後,使用的就是模組標識,我們可以通過模組標識來找到指定的模組
var md = require("./01.module"); //字尾.js可以省略  mt代表了引入的01.module.js模組
  1. 我們可以通過exports來向外部暴露變數和方法。只需要將需要暴露的變數或方法設定為exports的屬性即可
//向外部暴露屬性或方法
exports.x = 10;
exports.fn = function(){
	console.log("這是一個向外暴露的函式");
}

模組的分類

  • 模組分為兩大類
    核心模組
    - 由node引擎提供的模組
    - 核心模組的標識就是,模組的名字
    檔案模組
    - 由使用者自己建立的模組
    - 檔案模組的標識就是檔案的路徑(絕對路徑,相對路徑)
    相對路徑使用.或…開頭
var fs = require("fs"); //核心模組
var md = require("./01.module"); //檔案模組

全域性物件global

  1. 在node中有一個全域性物件global,它的作用和window類似。
  2. 在全域性中建立的變數都會作為global的屬性儲存。在全域性中建立的函式則會作為global的方法儲存。
  3. 當node在執行模組中的程式碼時,它會首先在程式碼的最外層,新增如下程式碼
function(exports, require, module, __filename, __dirname){
}
  1. 實際上模組中的程式碼都是包裝在一個函式中執行的,並且在函式執行時,同時傳遞進了五個實參:
    exports 該物件將我們的變數或函式暴露到外面
    require 函式,用來引用外部的模組
    module module代表的是當前模組本身 exports就是module的屬性
    __filename 當前模組的完整路徑
    __dirname 當前模組所在資料夾的完整路徑
console.log(module.exports == exports); //true  exports就是module的屬性
console.log(__filename); //當前模組的完整路徑
console.log(__dirname); //當前模組所在資料夾的完整路徑

執行結果:在這裡插入圖片描述

arguments.callee

這個屬性儲存的是當前執行的函式物件

exports和module.exports

  1. 通過exports只能使用.的方式來向外暴露內部變數
    exports.xxx = xxx;
  2. 而module.exports既可以通過.的形式,也可以直接賦值
    module.exports.xxx = xxx;
    module.exports = {}

    例如:
    exports的方式
exports.name = "Lili";
exports.age = 18;

module.exports的方式

module.exports = {
	name:"Lili",
	age: 18
}

所以一般來說,使用modue.exports比較方便。