模塊化的基本概念 什麼是模塊化? 模塊化是解決一個複雜問題時,自頂向下逐層把系統劃分為若幹個模塊的過程,編程中,就是遵守一定規則,把一個大文件拆成獨立並相互依賴的多個小模塊。 模塊化規範 使用什麼樣的語法格式引用模塊和向外暴露成員 CommonJS規範 Node.js 遵循了 CommonJS 的模 ...
模塊化的基本概念
什麼是模塊化?
模塊化是解決一個複雜問題時,自頂向下逐層把系統劃分為若幹個模塊的過程,編程中,就是遵守一定規則,把一個大文件拆成獨立並相互依賴的多個小模塊。
模塊化規範
使用什麼樣的語法格式引用模塊和向外暴露成員
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
這三個屬性,分別代表包的名字、版本號、包的入口