1. JS模塊化方面的不足
- JS沒有模塊系統(tǒng)胡野,不支持封閉的作用域和依賴管理
- 沒有標(biāo)準(zhǔn)庫(kù)爽锥,沒有文件系統(tǒng)和IO流API
- 也沒有包管理系統(tǒng)
2. CommonJS規(guī)范
- 封裝功能
- 封閉作用域
- 可能解決依賴問題
- 工作效率更高母截,重構(gòu)方便
3. Node中的CommonJS
在node.js 里,模塊劃分所有的功能徙赢,每個(gè)JS都是一個(gè)模塊
-
實(shí)現(xiàn)require方法,NPM實(shí)現(xiàn)了模塊的自動(dòng)加載和安裝依賴
(function(exports,require,module,__filename,__dirname){ exports = module.exports={} exports.name = 'zxmf'; exports = {name:'zxmf'}; return module.exports; })
4. 模塊分類
4.1 原生模塊
http
path
fs
util
events
編譯成二進(jìn)制,加載速度最快枢里,原來模塊通過名稱來加載
4.2 文件模塊
在硬盤的某個(gè)位置,加載速度非常慢哪轿,文件模塊通過名稱或路徑來加載 文件模塊的后綴有三種
后綴名為.js的JavaScript腳本文件,需要先讀入內(nèi)存再運(yùn)行
后綴名為.json的JSON文件,fs 讀入內(nèi)存 轉(zhuǎn)化成JSON對(duì)象
-
后綴名為.node的經(jīng)過編譯后的二進(jìn)制C/C++擴(kuò)展模塊文件,可以直接使用
一般自己寫的通過路徑來加載,別人寫的通過名稱去當(dāng)前目錄或全局的node_modules下面去找
4.3 第三方模塊
- 如果require函數(shù)只指定名稱則視為從node_modules下面加載文件盈魁,這樣的話你可以移動(dòng)模塊而不需要修改引用的模塊路徑
- 第三方模塊的查詢路徑包括module.paths和全局目錄
4.3.1 . 全局目錄
window如果在環(huán)境變量中設(shè)置了NODE_PATH
變量,并將變量設(shè)置為一個(gè)有效的磁盤目錄窃诉,require在本地找不到此模塊時(shí)向在此目錄下找這個(gè)模塊杨耙。 UNIX操作系統(tǒng)中會(huì)從 HOME/.node_libraries目錄下尋找
4.4 模塊的加載策略
4.5 文件模塊查找規(guī)則
5. 從模塊外部訪問模塊內(nèi)的成員 [#](#t105. 從模塊外部訪問模塊內(nèi)的成員)
- 使用exports對(duì)象
- 使用module.exports導(dǎo)出引用類型
6. 模塊對(duì)象的屬性
- module.id
- module.filename
- module.loaded
- module.parent
- module.children
- module.paths
7. 包
在Node.js中,可以通過包來對(duì)一組具有相互依賴關(guān)系的模塊進(jìn)行統(tǒng)一管理是飘痛,通過包可以把某個(gè)獨(dú)立功能封裝起來 每個(gè)項(xiàng)目的根目錄下面按脚,一般都有一個(gè)package.json文件,定義了這個(gè)項(xiàng)目所需要的各種模塊敦冬,以及項(xiàng)目的配置信息(比如名稱辅搬、版本、許可證等元數(shù)據(jù))脖旱。npm install命令根據(jù)這個(gè)配置文件堪遂,自動(dòng)下載所需的模塊,也就是配置項(xiàng)目所需的運(yùn)行和開發(fā)環(huán)境
項(xiàng)目 | 描述 |
---|---|
name | 項(xiàng)目名稱 |
version | 版本號(hào) |
description | 項(xiàng)目描述 |
keywords: {Array} | 關(guān)鍵詞萌庆,便于用戶搜索到我們的項(xiàng)目 |
homepage | 項(xiàng)目url主頁 |
bugs | 項(xiàng)目問題反饋的Url或email配置 |
license | 項(xiàng)目許可證 |
author,contributors | 作者和貢獻(xiàn)者 |
main | 主文件 |
bin | 項(xiàng)目用到的可執(zhí)行文件配置 |
repository | 項(xiàng)目代碼存放地方 |
scripts | 聲明一系列npm腳本指令 |
dependencies | 項(xiàng)目在生產(chǎn)環(huán)境中依賴的包 |
devDependencies | 項(xiàng)目在生產(chǎn)環(huán)境中依賴的包 |
peerDependencies | 應(yīng)用運(yùn)行依賴的宿主包 |
8. NPM
安裝完node之后只能使用Node語言特性及核心函數(shù)溶褪,我們還需要一個(gè)系統(tǒng)來下載、安裝和管理第三方模塊践险。在 Node看這個(gè)系統(tǒng)被稱為Node包管理器(Node Package Manager,NPM)猿妈。
8.1 npm提供的功能
- 公共注冊(cè)服務(wù),用戶可以把自己寫的包上傳到服務(wù)器上
- 命令行下載工具巍虫,用戶可以通過npm命令把別人寫的包下載到自己電腦上彭则,還可以管理自己模塊依賴的其它模塊
搜索第三方包的地址
https://www.npmjs.com/search
8.2npm命令
8.2.1 安裝包
打開命令行或終端,進(jìn)入要安裝包的目錄,然后執(zhí)行以下命令安裝依賴的模塊
npm install <package-name>
npm i mime
此命令會(huì)從服務(wù)器上下載此模塊到當(dāng)前目錄下的node_modules目錄下占遥,如果node_modules目錄不存在則會(huì)創(chuàng)建一個(gè)俯抖。 也可以安裝特定的版本
npm install <package name>@<version spec>
npm i mime@2.1
還可以使用一個(gè)版本號(hào)范圍來替換點(diǎn)位符。
npm i mime@2.x
8.2.2 卸載包
npm uninstall <package name>
8.2.3 更新包
我們還可以通過以下指令更新已經(jīng)安裝的包
npm update <package name>
8.3包的安裝模式
8.3.1 本地安裝
默認(rèn)情況下安裝命令會(huì)把對(duì)應(yīng)的包安裝到當(dāng)前目錄下瓦胎,這叫本地安裝芬萍,如果包里有可執(zhí)行的文件NPM會(huì)把可執(zhí)行文件安裝到./node_modules/.bin
目錄下尤揣。 本地安裝的模塊只能在當(dāng)前目錄和當(dāng)前目錄的子目錄里面使用。
8.4 全局安裝
-
如果希望安裝的包能夠在計(jì)算機(jī)機(jī)的所有目錄下面都能使用就需要全局安裝柬祠。
npm install <package-name> -g
-
在全局安裝的模式下北戏,npm會(huì)把包安裝到全局目錄,通過此命令可以查看當(dāng)前全局目錄的位置
npm root -g C:\Users\Administrator\AppData\Roaming\npm\node_modules
-
如果要修改全局安裝目錄漫蛔,可以使用
npm config set prefix “D:\node.js\node_global”
-
如果包里有可執(zhí)行文件最欠,會(huì)把可執(zhí)行文件安裝到此node_modules的上一級(jí)目錄中。
C:\Users\Administrator\AppData\Roaming\npm\
-
全局安裝的一般是需要在任意目錄下面執(zhí)行的命令惩猫,比如
babel
npm install babel-cli -g
如果全局安裝的命令不能用則可能是沒有正確配置用戶變量
PATH
,需要在系統(tǒng)變量中為PATH變量添加全局安裝目錄默認(rèn)情況下在全局安裝目錄下面的模塊是不能在任意文件夾下直接加載的,如果想要在任意目錄下面直接加載蚜点,需要在系統(tǒng)變量中新建一個(gè)名為
NODE_PATH
的變量轧房,它的值為全局安裝目錄下的node_modules
所在位置。
8.5 注冊(cè)绍绘、登錄和發(fā)布模塊
注冊(cè)npm賬號(hào) https://www.npmjs.com/
-
登錄
npm login
-
發(fā)布
npm publish
參考資料
9. yarn
Yarn 是一個(gè)依賴管理工具奶镶。它能夠管理你的代碼,并與全世界的開發(fā)者分享代碼陪拘。 代碼是通過包(有時(shí)也被稱為模塊)進(jìn)行共享的厂镇。 在每一個(gè)包中包含了所有需要共享的代碼,另外還定義了一個(gè)package.json
文件左刽,用來描述這個(gè)包捺信。
9.1 初始化一個(gè)新的項(xiàng)目
yarn init
9.2 添加一個(gè)依賴包
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
9.3 更新一個(gè)依賴包
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
9.4 刪除一個(gè)依賴包
yarn remove [package]
9.5 安裝所有的依賴包
yarn
或者
yarn install