深入淺出Node.js讀書心得(二)

Chapter 2 : 模組機制

CommonJS的模組規範

  1. 模組引用
    EX:
    var math = require('math');
  2. 模組定義
  3. 模組識別字

在 Node 引入模組時,需要經歷以下三個步驟:

  1. 路徑分析
  2. 檔案定位
  3. 編譯執行

目錄分析與套件

Node 首先在當前目錄下找尋 package.json (CommonJS 套件規範定義的套件描述檔),接著透過 JSON.parse() 解析套件描述物件,從中取出 main 屬性指定的檔案名稱進行定位。
假如 main 屬性指定的檔名錯誤,或者根本沒有 package.json 檔,Node 會把 index 當作預設的檔案,然後依序尋找 index.js、index.node、index.json。

模組編譯

編譯和執行是含括檔案模組的最後一個階段。定位實際的檔案後,Node 會新建一個模組物件,然後根據路徑載入並編譯。
針對不一樣的副檔名,載入方法也不盡相同,如下:

  • .js 文件
    透過 fs 模組同步讀取檔案後編譯
  • .node 文件
    這是用 C/C++ 編寫的擴充檔,透過 dlopen() 方法載入最後編譯而成的檔案
  • .json 文件
    透過 fs 模組同步讀取檔案後,再以 JSON.parse() 解析返回結果
  • 其餘副檔名的文件
    都被當成 .js 文件載入

套件與NPM

完全符合CommonJS規範的套件目錄應該包含以下檔案

  • package.json:套件描述檔
  • bin:存放可執行二進位檔的目錄
  • lib:存放 JavaScript 程式碼的目錄
  • doc:存放文件的目錄
  • test:存放單元測試案例的程式碼

在套件描述檔 (package.json) 的規範中,NPM 實際需要的欄位主要有

  • name
  • version
  • description
  • keywords
  • repositories
  • author
  • bin
  • main
  • scripts
  • engines
  • dependencies
  • devDependencies

深入淺出Node.js讀書心得(ㄧ)

Chapter 1 : Node 簡介

Node的特點:

  • 非同步 (Asynchronous) I/O
  • 事件 (Events) 與回呼函數 (Callback functions)
  • 單執行緒 (Single thread)
    • 優點:
      1. 不用像多執行緒那般處處在意狀態的同步問題
      2. 不會有鎖死 (deadlock) 的情況
      3. 沒有執行緒上下文交換 (content switch) 時帶來的額外性能代價
    • 缺點:
      1. 無法利用多核 CPU
      2. 錯誤會引起整個應用程式退出 (crash?),值得一再考驗其健壯性
      3. 大量計算佔用 CPU,導致無法繼續呼叫非同步 I/O
        Node 採用和 Html5 的 Web Workers 相同概念來解決單執行緒中大量計算的問題:child_process
  • 跨平台

Node的應用場景

  • I/O 密集型
  • 是否不擅長 CPU 密集型
    適當調整和分解大型運算為多個小任務,便能讓運算適時釋放,不阻塞 I/O 呼叫的啟動,這樣既可同時享受並行非同步 I/O 的好處,又能充分利用 CPU。
  • 與就有系統和平共存
  • 分散式應用

LoopBack簡介

方便建立 API 和連接後端資料的 Node.js Framework

關於

LoopBack 是一個高度擴展、開源的 Node.js 框架

  • 快速建立動態的 end-to-end REST APIs
  • 連接設備跟瀏覽器的數據跟服務
  • 採用 AndroidIOSAngularJS 軟件開發工具包能夠輕鬆地創建客戶端應用程序
  • 附加組件含,推播、檔案管理、第三方登入及地理定位
  • 使用 StrongLoop Arc 做到可視化編輯,部署和監控 LoopBack apps
  • LoopBack API gateway 作為使用 API 的顧客 (clients) 和 API 提供者的中間人達到外部化、安全及管理的 APIs
  • 可運行在本地或雲端

特點

  • 快速建立 model 及創建 REST 的 API

    • 簡單易用的 CLI 精靈
    • 如果你有 schema 的話根據他創建 models
    • 如果沒有則建立動態 models
    • 內置的 API 瀏覽器
  • 簡易的認證跟授權設置

    • 內置基於角色的存取控制
    • oAuth 使用者跟註冊模型
    • 使用 CLI 跟 JSON 格式增加個人設置策略
    • 瀏覽器支援 ( JSONP 和 CORS )
  • 支持模型關係

    • 定義 hasMany,belongsTo,hasAndBelongsToMany 關係
    • 自動生成相應關係的 REST 端點
  • MIT 開源許可

    • 雙許可:MIT 開源許可或 StrongLoop 許可
  • 連接後端數據儲存支援

    • MySQL, Oracle, MongoDB, Postgres 和其他
    • 其他 REST 服務
    • Oracle, MySQL, PostgreSQL 和 SQL Server 探索 APIs
  • 即席查詢支援

    • 裝置上的動態查詢,瀏覽器跟 Server
    • 針對關係資料庫支援 NoSQL 風格的查詢

開始使用

安裝

假設你已經安裝 Node.js
透過 npm 安裝 LoopBack 應用的 StrongLoop 工具

$ npm install -g strongloop

建立 app

建立一個 “Hello World” LoopBack app

npm & package.json

npm - Node Package Manager,Node 官方的組件管理方式,

npm 透過 command line 執行,並使用 package.json 檔案幫 node.js app 管理使用組件依賴關係。
也可以讓使用者安裝已經在 npm 官網註冊的 package。

現在安裝 Node.js 會自帶 npm

查看 npm 版本

$npm -v

更新 npm 到最新的版本

$npm install -g npm@latest

使用 npm 安裝套件

例如安裝 express 包(一個 web framework)
$npm install express

可以在這找到有哪些包可以安裝
https://www.npmjs.com/

或是透過指令搜尋
$ npm search

什麼是Node.js?

Node.js 是一個平台。採用 Chrome 瀏覽器的 Javascript 引擎 - V8,為了可以簡單的建立,快速、可擴展的網路應用。    


Node.js

  • Server - side javascript
  • 單一執行緒事件迴圈 (single-threaded event loop)
  • 使用事件驅動 (event-driven),非阻斷式的 IO(non-blocking I/O) 模型。這讓他輕量並且有效率。
  • 適合在分散式的裝置上,做資料密集、即時的處理程序。

主要元件:

V8

美國Google開發的開源JavaScript引擎,用於Google Chrome中。
執行之前將JavaScript編譯成了機器碼(machine code),而非傳統方式直譯(interpreting)位元組碼(byte code),以此提升效能。
使用了如內聯緩存(inline caching)方法來提高效能。

Wiki - http://en.wikipedia.org/wiki/V8_(JavaScript_engine)



APIs

http://nodejs.org/api/

libuv

Github - https://github.com/libuv/libuv

支援多個平台的非同步I/O Libary,包含:

  • Signal handling
  • Thread pool
  • ANSI escape code controlled TTY
  • File system events
  • Asynchronous file and file system operations
  • Asynchronous DNS resolution
  • Asynchronous TCP and UDP sockets
  • event loop backed by epoll, kqueue, IOCP, event ports
  • High resolution clock
  • Threading and synchronization primitives
  • IPC with socket sharing, using Unix domain sockets or named pipes (Windows)
  • Child processes



安裝 Node.js

到Node.js的官網 http://nodejs.org/download/ 選取要安裝的平台,下載安裝即可。

官方下載連結 - http://nodejs.org/download/


安裝完畢後,開啟終端機模式。
輸入 node -v 指令。
會在畫面顯示目前安裝的 Node.js 版本號,

看到此畫面表示已安裝成功。