Node進(jìn)階 ---- module&npm

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\_modulesHOME/.node_libraries目錄下尋找

4.4 模塊的加載策略

lookmodule.png

4.5 文件模塊查找規(guī)則

lookfile.png

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)行依賴的宿主包

package.json packagejson

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ā)布模塊

  1. 注冊(cè)npm賬號(hào) https://www.npmjs.com/

  2. 登錄

    npm login
    
  3. 發(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

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欠痴,隨后出現(xiàn)的幾起案子迄靠,更是在濱河造成了極大的恐慌,老刑警劉巖喇辽,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掌挚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡菩咨,警方通過查閱死者的電腦和手機(jī)吠式,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抽米,“玉大人特占,你說我怎么就攤上這事≡迫祝” “怎么了摩钙?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)查辩。 經(jīng)常有香客問我胖笛,道長(zhǎng)网持,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任长踊,我火速辦了婚禮功舀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘身弊。我一直安慰自己辟汰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布阱佛。 她就那樣靜靜地躺著帖汞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凑术。 梳的紋絲不亂的頭發(fā)上翩蘸,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音淮逊,去河邊找鬼催首。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泄鹏,可吹牛的內(nèi)容都是我干的郎任。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼备籽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼舶治!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起车猬,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤歼疮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后诈唬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韩脏,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年铸磅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赡矢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阅仔,死狀恐怖吹散,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情八酒,我是刑警寧澤空民,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響界轩,放射性物質(zhì)發(fā)生泄漏画饥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一浊猾、第九天 我趴在偏房一處隱蔽的房頂上張望抖甘。 院中可真熱鬧,春花似錦葫慎、人聲如沸衔彻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艰额。三九已至,卻和暖如春椒涯,著一層夾襖步出監(jiān)牢的瞬間柄沮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工逐工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漂辐。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓泪喊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親髓涯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子袒啼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容