Node.js

Node.js 概述

  • Node.js是一個(gè)基于Chrome V8 JavaScript引擎構(gòu)建的JavaScript運(yùn)行時(shí)。Node.js使用事件驅(qū)動(dòng)的非阻塞I / O模型,使其輕便且高效
  • 在 Java,PHP,或者 ASP.NET 等服務(wù)器端語(yǔ)言中,為每個(gè)客戶端連接創(chuàng)建一個(gè)新的線程,而 Node.js 是為每個(gè)客戶端觸發(fā)一個(gè) 在Node.js內(nèi)部進(jìn)行處理的事件.因此,使用 Node.js 可以同時(shí)處理多達(dá)幾萬(wàn)個(gè)用戶客戶端連接.
  • Node.js 適合開(kāi)發(fā)的應(yīng)用程序:當(dāng)應(yīng)用程序需要處理大量并發(fā)的輸入/輸出,而在向客戶端發(fā)出響應(yīng)之前,應(yīng)用程序內(nèi)部不需要進(jìn)行非常復(fù)雜的處理的時(shí)候,應(yīng)該考慮使用Node.js 進(jìn)行開(kāi)發(fā)該應(yīng)用程序.栗子:聊天服務(wù)器;綜合服務(wù)類網(wǎng)站或者電子商務(wù)網(wǎng)站的服務(wù)器.

Node的核心特性 : 單線程 非阻塞I/O 事件驅(qū)動(dòng)

安裝

簡(jiǎn)便辦法 (Windows 和 macOS 用戶初上手時(shí)建議使用此方法)

https://nodejs.org/en/download/

或者用系統(tǒng)的包管理器 (老手或 Linux 上用此方法可能更佳)

https://nodejs.org/en/download/package-manager/

NPM 入門(mén)

NPM ?(Node Package Manager) 是 Node.js 的包管理器,會(huì)隨著 Node.js 一起安裝

[slide]

為什么要使用包管理器

  • 因?yàn)槭謩?dòng)安裝很累很麻煩
  • 手動(dòng)維護(hù)版本更麻煩
  • 有了包管理器,可以(一定程度上)減少這些麻煩

cnmp

  • cnmp : 使用淘寶的鏡像源
npm config set registry https://registry.npm.taobao.org

但是要注意這樣會(huì)無(wú)法把你寫(xiě)的包發(fā)布出去 (也就是說(shuō)發(fā)布的時(shí)候要先拿掉這個(gè)設(shè)置)

或者使用 cnpm

使用 NPM

全局安裝

npm install <package_name> -g

?安裝到全局目錄下的 node_modules 目錄里

使用機(jī)會(huì)不是很多,基本只適用于安裝一些命令行工具

局部安裝 Part 1

npm install <package_name>

此方法會(huì)在當(dāng)前目錄生成 node_modules 目錄,并把文件放進(jìn)去

  • 由于只在當(dāng)前目錄安裝,不會(huì)干擾到全局目錄 (也就是說(shuō)電腦上其它項(xiàng)目不會(huì)受影響),理論上應(yīng)該是很好的方式
  • 但是實(shí)際生活中為了處理依賴關(guān)系,往往會(huì)使用 package.json,局部安裝的時(shí)候也往往不會(huì)只這么直接?安裝了事
  • 注意: 提交代碼到 git 服務(wù)器的時(shí)候 不要 帶上 node_modules 目錄。這個(gè)目錄可能會(huì)很大!

創(chuàng)建 package.json

創(chuàng)建 package.json 最簡(jiǎn)單的辦法就是在項(xiàng)目目錄執(zhí)行

npm init

執(zhí)行后會(huì)詢問(wèn)很多選項(xiàng)問(wèn)題,可以?一路回車,完成后就會(huì)在當(dāng)前目錄生成 package.json

局部安裝 Part 2

有了 package.json 就可以開(kāi)始?在局部安裝的同時(shí)指定依賴關(guān)系

npm install <package_name> --save

安裝并添加 生產(chǎn)環(huán)境 的依賴,會(huì)添加到 package.jsondependencies

npm install <package_name> --save-dev

安裝并添加 開(kāi)發(fā)環(huán)境 的依賴,會(huì)添加到 package.jsondevDependencies

npm install

根據(jù) package.json 的依賴關(guān)系自動(dòng)安裝所有需要安裝的包 (比如從 github 上 clone 了別人的項(xiàng)目的時(shí)候)

--save-dev 與 --save區(qū)別

  • 1.--save-dev 是你開(kāi)發(fā)時(shí)候依賴的東西(例如:babel,壓縮等開(kāi)發(fā)時(shí)需要),--save 是你發(fā)布之后還依賴的東西(例如:jQuery等)。
  • 2.正常使用npm install時(shí),會(huì)下載dependencies和devDependencies中的模塊,當(dāng)使用npm install --production或者注明NODE_ENV變量值為production時(shí),只會(huì)下載dependencies中的模塊。

運(yùn)行

來(lái)小試一下,編輯并保存一個(gè)名為 app.js 的文件,內(nèi)容為

console.log('hello world')

然后執(zhí)行

node app.js

即可看到運(yùn)行結(jié)果

導(dǎo)入和導(dǎo)出

導(dǎo)入

可以用 require 導(dǎo)入其它模塊

let fs = require('fs')

或者導(dǎo)入本地文件

let a = require('./a.js')

導(dǎo)入規(guī)則如下:

  1. Node.js 有一些核心模塊,加載時(shí)的優(yōu)先級(jí)別最高

  2. / 或者 ./ 作為開(kāi)頭,則會(huì)被認(rèn)為是本地文件。導(dǎo)入本地文件時(shí)如果不指定后綴,會(huì)按照 .js、.json、.node 的順序依次嘗試

  3. 如果核心模塊里沒(méi)找到,也沒(méi)有以 / 或者 ./ 作為開(kāi)頭,則會(huì)嘗試從 node_modules 目錄里加載。如果還沒(méi)有找到,則會(huì)嘗試在父一級(jí)進(jìn)行查找,直至找到或者抵達(dá)根目錄

目錄也可以作為模塊導(dǎo)入,具體在這里不展開(kāi)講解

導(dǎo)出

假設(shè)有如下兩個(gè)文件

foo.js

let circle = require('./circle.js')
console.log( 'The area of a circle of radius 4 is '
           + circle.area(4))

circle.js

let PI = Math.PI

exports.area = function (r) {
  return PI * r * r
}

exports.circumference = function (r) {
  return 2 * PI * r
}

circle.js 模塊輸出了 area() 和 circumference() 函數(shù)。

如果你想讓模塊導(dǎo)出成一個(gè)函數(shù)(比如構(gòu)造函數(shù)),或者你想導(dǎo)出一個(gè)完整對(duì)象, 那就使用 module.exports,而不是 exports。

例如

bar.js

let square = require('./square.js')
let mySquare = square(2)
console.log('The area of my square is ' + mySquare.area())

square.js

module.exports = function(width) {
  return {
    area: function() {
      return width * width
    }
  }
}

square.js 模塊導(dǎo)出了構(gòu)造函數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容