前言 業餘時間充實自我,入手學習瞭解一下傳說中純事件驅動/非阻塞的js架構 --nodejs 好記性不如爛筆頭,本系列隨筆用於整理記錄學習nodejs過程中的心得 目錄 1. nodejs簡介 nodejs基於Google開源js引擎V8開發,從2009年誕生起就獲得強烈關註,是一套用來編寫高性能網 ...
前言
業餘時間充實自我,入手學習瞭解一下傳說中純事件驅動/非阻塞的js架構 --nodejs
好記性不如爛筆頭,本系列隨筆用於整理記錄學習nodejs過程中的心得
目錄
- nodejs簡介
- nodejs安裝
- nodejs載入模塊
1. nodejs簡介
nodejs基於Google開源js引擎V8開發,從2009年誕生起就獲得強烈關註,是一套用來編寫高性能網路伺服器的js工具包。簡單的說 nodejs 就是運行在服務端的 JavaScript。
優勢:
- 純事件驅動,非同步非阻塞。框架內部提供的大多api都是非同步調用風格,無需等待某個操作完成
- 單線程。這裡的單線程指主線程為單線程,所有的阻塞的全部放入一個線程池中,然後主線程通過隊列的方式跟線程池來協作
- 易入手。基於js語言,js是開發者必備的一項技能,不用再單獨新學一門陌生的語言,降低了學習的門檻
- 高效穩定。選擇了目前最快的瀏覽器內核V8做為執行引擎,保證了Nodejs的性能和穩定性
弱勢:
- 業務複雜程式。面對複雜業務,需要大量計算顯然是沒有後臺代碼給力
- 記憶體管控。js是一門弱類型語言,數據結構較為單一。對象都是基於json,無法使用記憶體管控
- 不需要非同步的程式。對於nodejs的非同步特性來說,不需要非同步操作的程式可能會比較麻煩
2. nodejs安裝
由於本人基於Windows系統開發,這裡只介紹Windows環境安裝過程。
打開nodejs官網找到自己環境相匹配的安裝文件下載(需要區分32位還是64位),這裡我安裝的最新版本v10.15.0-x64
下載地址:https://nodejs.org/en/download/releases/
安裝下載好的文件,(傻瓜式安裝一直下一步即可)
安裝過後WIN-R打開cmd命令視窗運行指令 node -v查看是否對應安裝的版本,即是否安裝成功
擴展:安裝和應用包管理(NPM)
NPM是三位一體的系統——第三方包庫,管理電腦中安裝的包的機制以及定義包依賴關係。當我們使用npm去安裝一些第三方庫的時候,安裝包會放在運行NPM命令時所在的目錄中的node_modules文件夾中,從v0.6.0以後npm就已經包含在nodejs的安裝包內。
在cmd命令視窗執行npm init先初始化NPM,以填寫表單方式初始化生成一個新的package.json文件。(都有預設值一直下一步即可)
初始化後即可通過NPM安裝需要的插件,通過命令指向安裝的文件夾路徑,再執行安裝命令npm install <package name>@<version>安裝所需的第三方包(version不填代表最新版本),命令行完成之後,我們會看到在文件夾中就新建了一個node_modules文件夾,並且把我們需要的庫已經安裝在文件夾中,如下圖:
NPM兩種模式:
本地模式(預設):該模式只工作在本地文件夾層次,不會引起系統範圍的變化,如果想安裝包時不對本地已安裝的包造成影響,本地模式十分合適。
全局模式:全全局模式適合安裝那些全局可用的包,比如提供命令行實用工具的包或不被應用程式直接調用的包。
安裝包: npm install <package name>@<version>
安裝全局模式包:npm install -g ...
卸載包:npm uninstall ...
卸載全局模式包:npm uninstall -g ...
更新包:npm update ...
更新全局模式包:npm update -g ...
3. nodejs載入模塊
nodejs取消了JavaScript預設的全局名稱空間,使用commonjs模塊系統取代,可以直接使用require函數載入模塊,如果模塊存在並且沒有錯誤語法,那麼調用require()函數就會返回這個模塊對象
3.1.載入核心模塊
核心模塊是nodejs框架內部自帶且非常重要常用的,核心模塊不能通過文件路徑引用只能通過模塊名引用,即使已經存在一個與其同名的第三方模塊也會被優先載入。例如想載入和使用http核心模塊
var http = require('http');
這裡會返回http模塊對象,細節可參見nodejs的httpapi文檔
3.2.載入文件/文件夾模塊
可以通用提供文件/文件夾路徑的方式載入非核心模塊。
var module1= require('/script/module1'); 按文件載入此處可省略文件擴展名.js
var module = require('/script');
按文件夾載入,node就會在指定文件夾下查找package.json文件,如果文件夾下不存在該文件,則預設尋找文件夾下index.js文件載入。存在則會解析該配置文件,找到main屬性配置的文件路徑載入。
如果一個模塊名未找到載入文件,node就會嘗試在當前目錄的node_modules文件夾下查找,如果還是沒有找到會繼續查找父級文件夾,知道最上級或找到為止。
3.3.緩存模塊
模塊在首次載入時會被緩存,如果模塊名被解析為相同的模塊,那麼每次調用require(modulename)都會只返回同一模塊,且初始化過程只會執行一次