Node.js介紹和環(huán)境配置(含NVM响驴、NPM豁鲤、YARN的安裝)

Node.js的介紹

什么是 Node.js(官方解釋?zhuān)?/h3>

Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 代碼運(yùn)行環(huán)境畅形。 Node.js使用了一個(gè)事件驅(qū)動(dòng)日熬、非阻塞式I/O的模型( Node.js的特性)肾胯,使其輕量級(jí)又高效敬肚。 Node.js 的包管理器 npm 是全球最大的開(kāi)源庫(kù)生態(tài)系統(tǒng)艳馒。

img

如上圖所示:

  • Node 內(nèi)部采用 Google Chrome 的 V8 引擎弄慰,作為 JavaScript 語(yǔ)言解釋器陆爽;
  • 通過(guò)自行開(kāi)發(fā)的 libuv 庫(kù)慌闭,調(diào)用操作系統(tǒng)資源。

什么是 Node.js(非官方解釋?zhuān)?/h3>

Node.js是 JavaScript 語(yǔ)言在服務(wù)器端的運(yùn)行環(huán)境(平臺(tái))省古。Node.js 不是一門(mén)語(yǔ)言衫樊,也不是 JavaScript 的框架科侈。

  • 與PHP臀栈、JSP权薯、Python、Perl黍析、Ruby的“既是語(yǔ)言阐枣,也是平臺(tái)”不同蔼两,Node.js的使用JavaScript進(jìn)行編程额划,運(yùn)行在 Chrome 的 V8 引擎上俊戳。
  • 與PHP品抽、JSP等相比(PHP甜熔、JSP腔稀、.net都需要運(yùn)行在服務(wù)器程序上焊虏,Apache诵闭、Naginx、Tomcat易桃、IIS锌俱。
    )贸宏,Node.js跳過(guò)了Apache吭练、Naginx鲫咽、IIS等HTTP服務(wù)器浑侥,它自己不用建設(shè)在任何服務(wù)器軟件之上寓落。Node.js的許多設(shè)計(jì)理念與經(jīng)典架構(gòu)(LAMP = Linux + Apache + MySQL + PHP)有著很大的不同伶选,可以提供強(qiáng)大的伸縮能力仰税。Node.js沒(méi)有web容器陨簇。

運(yùn)行環(huán)境(平臺(tái))的含義

  • 首先河绽,JavaScript 語(yǔ)言通過(guò) Node 在服務(wù)器上運(yùn)行耙饰,在這個(gè)意義上苟跪,Node 有點(diǎn)像 JavaScript 虛擬機(jī)件已。
  • 其次拨齐,Node 生態(tài)系統(tǒng)活躍瞻惋,提供了大量的開(kāi)源庫(kù)歼狼,使得 JavaScript 語(yǔ)言能與操作系統(tǒng)進(jìn)行交互(比如讀寫(xiě)文件羽峰、新建子進(jìn)程)梅屉,在這個(gè)層次上坯汤,Node 又是屬于 JavaScript 的工具庫(kù)惰聂。

為什么要學(xué)習(xí)服務(wù)器端開(kāi)發(fā)

  • 能夠和后臺(tái)開(kāi)發(fā)的程序員更佳緊密地結(jié)合搓幌、更順暢地溝通溉愁。
  • 當(dāng)網(wǎng)站的業(yè)務(wù)邏輯需要前置時(shí)拐揭,前端人員需要學(xué)習(xí)一些后臺(tái)開(kāi)發(fā)的技術(shù)投队,以完成相應(yīng)的任務(wù)。
  • 拓寬知識(shí)視野和技術(shù)棧寝贡,能夠站在全局的角度審視整個(gè)項(xiàng)目圃泡。

為什么選擇 Node.js 做后臺(tái)開(kāi)發(fā)

  • 使用 JavaScript 語(yǔ)言 開(kāi)發(fā)服務(wù)器端應(yīng)用颇蜡。
  • 一些公司要求前端工程師掌握 Node.js 開(kāi)發(fā)风秤。
  • Node.js 生態(tài)系統(tǒng)活躍缤弦,提供了大量的開(kāi)源庫(kù)碍沐。

Node.js的發(fā)展

Node 的歷史

  • 2008年左右,隨著 Ajax 的逐漸普及衷蜓,Web 開(kāi)發(fā)逐漸走向復(fù)雜化累提,系統(tǒng)化;
  • 2009年2月磁浇,Ryan Dahl 想要?jiǎng)?chuàng)建一個(gè)輕量級(jí)斋陪,適應(yīng)現(xiàn)代 Web 開(kāi)發(fā)的平臺(tái);
  • 2009年5月扯夭,Ryan Dahl 在 GitHub 中開(kāi)源了最初版本鞍匾,同年11月交洗,JSConf 就安排了 Node 講座;
  • 2010年底橡淑,Joyent 公司資助构拳,Ryan Dahl 也加入了該公司,專(zhuān)門(mén)負(fù)責(zé) Node 的開(kāi)發(fā)梁棠;
  • 2011年7月置森,在微軟的支持下登陸 Windows 平臺(tái)。PS:node 的生產(chǎn)環(huán)境基本是在 Linux 下符糊。

據(jù) Node.js 創(chuàng)始人 Ryan Dahl 回憶凫海,他最初希望采用 Ruby,但是 Ruby 的虛擬機(jī)效率不行男娄。

注意:是 Node 選擇了 JavaScript行贪,不是 JavaScript 發(fā)展出來(lái)了一個(gè) Node漾稀。

Node.js的主要應(yīng)用領(lǐng)域

  • RESTFul API
  • 實(shí)時(shí)通信:如消息推送等
  • 高并發(fā)
  • I/O阻塞

知名度較高的Node.js開(kāi)源項(xiàng)目

img
  • express:Node.js中著名的web服務(wù)器框架。
  • Koa:下一代的 Node.js 的 Web 框架建瘫。
  • mocha:功能強(qiáng)大的 node.js 測(cè)試框架崭捍。
  • PM2:node 本來(lái)是單進(jìn)程的,PM2可以實(shí)現(xiàn)和管理多進(jìn)程啰脚。
  • jade:非常優(yōu)秀的模板引擎殷蛇,不僅限于 js 語(yǔ)言。
  • CoffeeScript:用簡(jiǎn)潔的方式展示 JavaScript 優(yōu)秀的部分橄浓。
  • Atom:文本編輯器粒梦。
  • socket.io:實(shí)時(shí)通信框架。

Node.js的特點(diǎn)

  • 單線(xiàn)程

Node.js 運(yùn)行環(huán)境配置:通過(guò) Node.js 安裝包(不推薦)

去 Node.js 的官網(wǎng)下載安裝包:

img

我們也可以在https://nodejs.org/en/download/releases/ 里下載歷史版本贮配。

img

注意谍倦,我們以一定要用偶數(shù)版(V4、V6等)泪勒,不要用奇數(shù)版(比如V5)昼蛀,因?yàn)槠鏀?shù)版不穩(wěn)定。

我們并不推薦直接采用 Node.js.msi(windows)或者 Node.js.pkg(Mac) 安裝包進(jìn)行安裝圆存,原因如下:

  • 不方便 Node.js 版本的更新叼旋;
  • 無(wú)法回滾到之前的版本;
  • 無(wú)法在多個(gè)版本之間切換(在有些項(xiàng)目中沦辙,我們要使用 Node 的指定版本)夫植。

因此,我們暫時(shí)先不用安裝 Node.js油讯,稍后用 NVM 的方式來(lái)安裝 Node.js详民。

Node.js 運(yùn)行環(huán)境配置:通過(guò) NVM(推薦)

NVM:node.js version manager,用來(lái)管理 node 的版本陌兑。

我們可以先安裝 NVM沈跨,然后通過(guò) NVM 安裝 Node.js。這是官方推薦的做法兔综。

Windows 和 Mac 下安裝的Node.js 的步驟如下饿凛。

Windows 系統(tǒng)安裝 Node.js

1、安裝 NVM

(1)我們?nèi)?https://github.com/coreybutler/nvm-windows/releases 下載 NVM 的安裝包:

img

下載下來(lái)后软驰,直接解壓到 D:\web目錄下:

img

(2)在上面的目錄中涧窒,新建一個(gè)settings.txt文件,里面的內(nèi)容填充如下:

root: D:\web\nvm
path: D:\web\nodejs
arch: 64
proxy

上方內(nèi)容的解釋?zhuān)?/p>

  • root 配置為:當(dāng)前 nvm.exe 所在的目錄
  • path 配置為:node 快捷方式所在的目錄
  • arch 配置為:當(dāng)前操作系統(tǒng)的位數(shù)(32/64)
  • proxy 不用配置

(3)配置環(huán)境變量:

  • NVM_HOME = D:\web\nvm(當(dāng)前 nvm.exe 所在目錄)
  • NVM_SYMLINK = D:\web\nodejs (node 快捷方式所在的目錄)
  • PATH += ;%NVM_HOME%;%NVM_SYMLINK%

配置成功后锭亏,重啟資源管理器纠吴。

2、驗(yàn)證:(在 cmd 命令行中輸入命令)

(1)輸入nvm命令查看環(huán)境變量是否配置成功:

img

(2)輸入 nvm ls慧瘤,查看已安裝的所有 node 版本呜象。

(3)輸入 nvm -v膳凝,查看 已安裝的 nvm 版本。

(4)輸入 node -v恭陡,查看正在使用的 node 版本蹬音。

如果 Node 安裝失敗著淆,可以參考上面這個(gè)鏈接。

3拴疤、安裝指定版本的 Node.js

nvm install 版本號(hào)

# 舉例
nvm install 8.10.0

輸入 node -v永部,查看當(dāng)前使用的 node 版本。

關(guān)于 NVM 的常用命令呐矾,詳見(jiàn)下一段苔埋。

Mac 系統(tǒng)安裝 Node.js

1、安裝 NVM

(1)打開(kāi) 終端.app蜒犯,輸入:

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

安裝成功的界面:

img

完成后组橄,nvm就被安裝在了~/.nvm下。

如果發(fā)現(xiàn)安裝失敺K妗:

img

原因:Xcode 軟件進(jìn)行過(guò)更新玉工。

解決辦法:打開(kāi) Xcode 軟件,同意相關(guān)內(nèi)容即可淘菩。

(2)配置環(huán)境變量:

編輯器打開(kāi)~/.bash_profile文件遵班,如果不會(huì)就輸入open ~/.bash_profile

(補(bǔ)充:如果你的Mac電腦里找不到~/.bash_profile文件潮改,那就找找有沒(méi)有~/.profile文件狭郑,或者~/.bashrc文件,或者~/.zshrc文件)汇在。

在最后一行輸入:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

如果你發(fā)現(xiàn)文件中已經(jīng)存在了上面這行代碼翰萨,就不用往里面加了。這一步的作用是每次新打開(kāi)一個(gè)bash趾疚,nvm都會(huì)被自動(dòng)添加到環(huán)境變量中缨历。

最后以蕴,輸入 source ~/.bash_profile重啟環(huán)境變量的配置糙麦。

PS:NVM 現(xiàn)在已經(jīng)不支持 Homebrew 的方式來(lái)安裝了。

參考鏈接:http://www.reibang.com/p/a3f8778bc0a1

2丛肮、驗(yàn)證:(在 終端命令行中輸入命令)

(1)輸入 nvm 命令查看環(huán)境變量是否配置成功:

(2)輸入 nvm ls赡磅,查看已安裝的所有 node 版本。

(3)輸入 nvm -v宝与,查看 已安裝的 nvm 版本。

(4)輸入 node -v,查看正在使用的 node 版本喻圃。

3杠袱、安裝指定版本的 Node.js

和Windows下一樣,也是執(zhí)行如下命令:

nvm install 版本號(hào)

# 舉例
nvm install 8.10.0

網(wǎng)速有點(diǎn)慢烂斋,要稍等。

img

輸入 node -v,查看當(dāng)前使用的 node 版本飞蛹。

安裝好 Node 之后,npm 也會(huì)自動(dòng)安裝的灸眼,輸入 npm -v卧檐,查看 npm 的版本。

關(guān)于 NVM 的常用命令焰宣,詳見(jiàn)下一段霉囚。

NVM 的常用命令

注意,這一段說(shuō)的是 NVM 的常用命令匕积,不是 Node的 常用命令盈罐。

查看當(dāng)前使用的 nvm 版本:

nvm -v

nvm --version

查看本地安裝的所有的 Node.js 版本:

nvm list|ls

安裝指定版本的 Node.js:

nvm install 版本號(hào)

# 舉例
nvm install 8.10.0

卸載指定版本 Node.js:

nvm uninstall 版本號(hào)

切換使用指定版本的node:

nvm use 版本號(hào)

Node.js 的常用命令

查看 node 的版本:

node -v

執(zhí)行腳本字符串:

node -e 'console.log("Hello World")'

運(yùn)行腳本文件:

node index.js
node path/index.js
node path/index

查看幫助:

node --help

進(jìn)入 REPL 環(huán)境:

node

REPL 的全稱(chēng):Read、Eval闸天、 Print暖呕、Loop。類(lèi)似于瀏覽器的控制臺(tái)苞氮。

img

如果要退出 REPL 環(huán)境湾揽,可以輸入.exitprocess.exit()

在 VS Code 里笼吟,我們可以在菜單欄選擇“幫助->切換開(kāi)發(fā)人員工具”库物,打開(kāi)console控制臺(tái)。

包和 NPM

什么是包

由于 Node 是一套輕內(nèi)核的平臺(tái)贷帮,雖然提供了一系列的內(nèi)置模塊戚揭,但是不足以滿(mǎn)足開(kāi)發(fā)者的需求,于是乎出現(xiàn)了包(package)的概念:
與核心模塊類(lèi)似撵枢,就是將一些預(yù)先設(shè)計(jì)好的功能或者說(shuō) API 封裝到一個(gè)文件夾民晒,提供給開(kāi)發(fā)者使用。

Node 本身并沒(méi)有太多的功能性 API锄禽,所以市面上涌現(xiàn)出大量的第三方人員開(kāi)發(fā)出來(lái)的 Package潜必。

包的加載機(jī)制

如果 Node中自帶的包和第三方的包名沖突了,該怎么處理呢沃但?原則是:

  • 先在系統(tǒng)核心(優(yōu)先級(jí)最高)的模塊中找磁滚;
  • 然后到當(dāng)前項(xiàng)目中 node_modules 目錄中找。

比如說(shuō):

requiere(`fs`)

那加載的肯定是系統(tǒng)的包。所以垂攘,我們盡量不要?jiǎng)?chuàng)建一些和現(xiàn)有的包重名的包维雇。

NPM的概念

包的生態(tài)圈一旦繁榮起來(lái),就必須有工具去來(lái)管理這些包晒他。NPM 應(yīng)運(yùn)而生吱型。

NPM:Node Package Manager。官方鏈接: https://www.npmjs.com/

隨著時(shí)間的發(fā)展陨仅,NPM 出現(xiàn)了兩層概念:

  • 一層含義是 Node 的開(kāi)放式模塊登記和管理系統(tǒng)唁影,亦可以說(shuō)是一個(gè)生態(tài)圈,一個(gè)社區(qū)掂名。
  • 另一層含義是 Node 默認(rèn)的模塊管理器据沈,是一個(gè)命令行下的軟件,用來(lái)安裝和管理 Node 模塊饺蔑。

NPM 的安裝(不需要單獨(dú)安裝)

NPM 不需要單獨(dú)安裝锌介。默認(rèn)在安裝 Node 的時(shí)候,會(huì)連帶一起安裝 NPM:

img

NVM猾警、Node孔祸、NPM 安裝之后,目錄分布如下:

img
img
img

輸入 npm -v发皿,查看 npm 的版本:

img

如果上方命令無(wú)效崔慧,可能是之前的 node 并沒(méi)有完全安裝成功。解決辦法:https://segmentfault.com/a/1190000011114680

另外穴墅,Node 附帶的 NPM 可能不是最新版本惶室,可以用下面的命令,更新到最新版本:

npm install npm -g

配置 NPM 的全局目錄(暫略)

NPM 默認(rèn)安裝到當(dāng)前正在使用 Node 版本所在目錄下玄货。我們建議重新配置 NPM 的全局目錄皇钞。

輸入npm config ls,查看:

img

NPM的常用命令

  • npm init --yes

項(xiàng)目的初始化松捉。執(zhí)行完成后夹界,會(huì)生成package.json文件。

  • npm install [package]

只在當(dāng)前工程下安裝 package隘世。

  • npm install -g [package]

在全局環(huán)境下安裝 package可柿。

  • npm run [script]

NRM的安裝(Win 和 Mac 通用)

由于 NPM 的資源都在國(guó)外,有時(shí)候會(huì)被墻丙者,導(dǎo)致無(wú)法下載或者很慢复斥。此時(shí)可以用到NRM。

NRM:Node Registry Manager蔓钟。作用是:切換和管理包的鏡像源永票。

安裝 NRM:

npm install -g nrm
img

NRM 的常用命令:

# 顯示全部的鏡像
nrm ls

# 使用淘寶的鏡像
nrm use taobao

效果入下:

img

推薦的國(guó)內(nèi)加速鏡像淘寶:https://npm.taobao.org/

安裝cnpm

安裝cnpm替換npm(npm由于源服務(wù)器在國(guó)外卵贱,下載node包速度較慢滥沫,cnpm使用國(guó)內(nèi)鏡像):

npm install -g cnpm --registry=https://registry.npm.taobao.org
img

如果我們需要通過(guò) cnpm 去安裝一個(gè)包時(shí)侣集,舉例如下:

cnpm i vue

解釋?zhuān)?i 指的就是 install。

Node 的使用

我們可以輸入node命令兰绣,然后在里面寫(xiě) js 的代碼世分,也可以 通過(guò) node 運(yùn)行 js 文件。比如缀辩,編寫(xiě)好一個(gè) js文件01.js臭埋,然后在命令行輸入:

node 01.js

就可以執(zhí)行 js 程序。

YARN

官方文檔:https://yarn.bootcss.com/docs/

參考文章:https://www.cnblogs.com/qianguyihao/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末臀玄,一起剝皮案震驚了整個(gè)濱河市瓢阴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌健无,老刑警劉巖荣恐,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異累贤,居然都是意外死亡叠穆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)臼膏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)硼被,“玉大人,你說(shuō)我怎么就攤上這事渗磅∪铝颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵始鱼,是天一觀(guān)的道長(zhǎng)论巍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)风响,這世上最難降的妖魔是什么嘉汰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮状勤,結(jié)果婚禮上鞋怀,老公的妹妹穿的比我還像新娘。我一直安慰自己持搜,他們只是感情好密似,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著葫盼,像睡著了一般残腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天抛猫,我揣著相機(jī)與錄音蟆盹,去河邊找鬼。 笑死闺金,一個(gè)胖子當(dāng)著我的面吹牛逾滥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播败匹,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寨昙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了掀亩?” 一聲冷哼從身側(cè)響起舔哪,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎槽棍,沒(méi)想到半個(gè)月后尸红,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刹泄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年外里,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片特石。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盅蝗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姆蘸,到底是詐尸還是另有隱情墩莫,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布逞敷,位于F島的核電站狂秦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏推捐。R本人自食惡果不足惜裂问,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牛柒。 院中可真熱鬧堪簿,春花似錦、人聲如沸皮壁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛾魄。三九已至虑瀑,卻和暖如春湿滓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舌狗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工叽奥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人把夸。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像铭污,于是被迫代替她去往敵國(guó)和親恋日。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353