模組化是解決一個複雜問題時,自頂向下逐層把系統劃分為若干個模組的過程,程式設計中,就是遵守一定規則,把一個大檔案拆成獨立並相互依賴的多個小模組。
使用什麼樣的語法格式參照模組和向外暴露成員
Node.js 遵循了 CommonJS
的模組化規範。其中:
module
變數代表當前模組require()
方法module.exports
物件是瀏覽器端與伺服器端通用的模組化開發規範。它的出現極大的降低了前端開發者的模組化學習成本,開發者不需再額外學習 AMD、CMD 或 Commonjs 等模組化規範。
ES6 模組化規範中定義:
import
關鍵字export
關鍵字在Node.js中設定ES6模組化規範:
v14.15.1
或更高版本的node.jspackage.js
的根節點新增"type:""module"
節點文章以CommonJS
規範為例
//內建模組
const http = require('http')
//自定義模組
const custom = require('./custom.js')//字尾名可以省略
//第三方模組
const moment = require('moment')
注意:當使用require
載入時,會執行被載入模組的程式碼
在自定義模組中定義的變數和方法等成員,只能在當前模組被存取,防止全域性變數汙染的問題。
//username.js
const username='張三'
function sayHello(){
console.log("大家好,我是"+username)
}
//test.js
const custom=require('./username')
console.log(custom)//輸出:{} 空物件
每個.js自定義模組中都有一個module
物件,它裡面儲存了和當前模組有關的資訊
在自定義模組中,可以使用它將模組內的成員共用出去,當使用require()
方法匯入時,得到的就是module.exports
所指的物件
//username.js
module.exports.username = '張三'
module.exports.sayHello = function () {
console.log("大家好,我是" + username)
}
注意:
module.exports
預設指向空物件require()
方法匯入的結果,以module.exports
指向的物件為準為了簡化,Node提供了exports物件。預設情況下,exports
和module.exports
指向同一個物件。
exports.username= '張三'
module.exports={
gender:'男',
age:22
}
//{gender:'男',age:22}
module.exports.username= '張三'
exports={
gender:'男',
age:22
}
//{username:'張三'}
require()
方法匯入的結果,永遠以module.exports
指向的物件為準exports
和module.exports
在Node.js中第三方模組叫做包,來自於第三方個人或團隊,免費且開源。
包基於內建模組封裝出來,提供了更高階、更方便的API,極大的提高了開發效率。
使用npm包管理工具(Node Package Manager)
npm install 包的完整名稱
npm i 包的完整名稱 -g//全域性安裝
npm install [email protected]
npm uninstall 包的完整名稱
node_modules
資料夾用來存放所有已安裝到專案中的包
package-lock.json
組態檔用來記錄node_modules
目錄下每一個包的下載資訊
包的版本號:「點分十進位制」
第一位數位:大版本
第二位數位:功能版本
第三位數位:Bug修復版本
(只要前面的版本號增長,後面歸零)
npm規定,專案根目錄中,必須提供一個package.json
的包管理組態檔
npm init -y//快速新建package.json
專門記錄使用npm insatll命令安裝了哪些包
npm install
//執行該命令,npm會讀取package.json中的dependencies節點,一次性下載所有的包
如果某些包只在開發中用到,建議安裝在devDependencies節點
npm i 包的完整名稱 -D
npm i 包的完整名稱 --save-dev
切換npm的下包映象源
npm config get registry //檢視當前映象源
npm config set registry=xxxxxxxxxx//切換映象源
nrm工具
npm i nrm -g
nrm ls//檢視所有映象源
nrm use taobao//切換映象源
專案包和全域性包、開發依賴包和核心依賴包
package.json
必須包含name
、version
、main
這三個屬性,分別代表包的名字、版本號、包的入口