模塊化的基本概念
什么是模塊化?
模塊化是解決一個復雜問題時,自頂向下逐層把系統劃分為若干個模塊的程序,編程中,就是遵守一定規則,把一個大檔案拆成獨立并相互依賴的多個小模塊,
模塊化規范
使用什么樣的語法格式參考模塊和向外暴露成員
CommonJS規范
Node.js 遵循了 CommonJS 的模塊化規范,其中:
- 每個模塊內部,
module變數代表當前模塊 - 匯入其它模塊使用
require()方法 - 模塊對外共享成員使用
module.exports物件
ES6 模塊化規范
是瀏覽器端與服務器端通用的模塊化開發規范,它的出現極大的降低了前端開發者的模塊化學習成本,開發者不需再額外學習 AMD、CMD 或 Commonjs 等模塊化規范,
ES6 模塊化規范中定義:
- 每個js檔案都是一個獨立的模塊
- 匯入其它模塊成員使用
import關鍵字 - 向外共享模塊成員使用
export關鍵字
在Node.js中設定ES6模塊化規范:
- 安裝
v14.15.1或更高版本的node.js - 在
package.js的根節點添加"type:""module"節點
Node.js中的模塊化
Node.js中模塊的分類
- 內置模塊:官方提供的fs、path、http等
- 自定義模塊:用戶創建的每個.js檔案,都是自定義模塊
- 第三方模塊:由第三方開發的,需要下載的模塊
加載模塊
文章以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)//輸出:{} 空物件
向外共享成員
module物件
每個.js自定義模塊中都有一個module物件,它里面存盤了和當前模塊有關的資訊
module.exports物件
在自定義模塊中,可以使用它將模塊內的成員共享出去,當使用require()方法匯入時,得到的就是module.exports所指的物件
//username.js
module.exports.username = '張三'
module.exports.sayHello = function () {
console.log("大家好,我是" + username)
}
注意:
module.exports默認指向空物件- 使用
require()方法匯入的結果,以module.exports指向的物件為準
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
npm和包
包
在Node.js中第三方模塊叫做包,來自于第三方個人或團隊,免費且開源,
包基于內置模塊封裝出來,提供了更高級、更方便的API,極大的提高了開發效率,
包的下載
- 從 https://www.npmis.com/ 網站上搜索自己所需要的包
- 從https://registry.npmis.org/ 服務器上下載自己需要的包
使用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
dependencies節點
專門記錄使用npm insatll命令安裝了哪些包
npm install
//執行該命令,npm會讀取package.json中的dependencies節點,一次性下載所有的包
devDependencies節點
如果某些包只在開發中用到,建議安裝在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這個包組態檔
package.json必須包含name、version、main這三個屬性,分別代表包的名字、版本號、包的入口
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/547626.html
標籤:其他
