【NodeJS 學習筆記01】不學就老了

前言

再不學nodeJs,咱們就老了......在HTML5大浪襲來的時候,不少先輩就開始了NodeJs之旅,而那時我還在作服務器端的程序
後來轉成前端,和梯隊的距離已經很大了,由於我會服務器端語言,還幹了好久,因此至今纔開始學習NodeJs,向完整的前端前進
此次學習NodeJs的計劃是:
① 1-2周學習基礎知識
② 1周左右開發一個簡單項目
③ 利用NodeJs開發一套用於移動端調試的工具
④ 打包相關(這個可能比較遠了)javascript

NodeJs特色

① 異步
從文件讀取到網絡請求,NodeJs皆以異步完成,回調函數佔據重要做用,在編程模型上Node是領先的html

② 事件回調
事件回調讓程序變得輕巧,可是具體怎麼樣仍是取決於程序員。可是回調函數在閱讀上其實仍是有必定難度的前端

③ 單線程
Node是單線程的,若是多線程的話,這門語言水又深了,問幾句進程中的通訊時很討厭的,但線程也沒有死鎖等問題
可是性能相關就有問題了,由於不能利用多核;java

模塊機制/CommonJs

咱們原來作服務器端的開發,若是沒有很好的組織代碼的話,後期維護很是困難,因此纔會有什麼MVC,什麼三層架構
而如今前端的業務邏輯逐向後端靠攏,就單頁應用來講,已經超事後端的程序邏輯
頁面view不停的增長會帶來js代碼量的激增,如何很好的管理咱們的前端代碼成了一個問題,因此requireJs出現了......
PS:尼瑪這段和nodeJs有一毛錢關係哇......
javascript是沒有模塊化系統的,因而就有CommonJs的提出,讓js具有開發大型應用的基礎node

模塊引用

咱們若是要引用一個模塊,好比數學計算相關:程序員

var math = require('math');

模塊定義

咱們若是要定義本身的模塊能夠這樣幹web

exports.add = function () {
  return sum;
}

若是此函數在math中定義的話,就能使用了express

math.add();

模塊標識

模塊標識就是傳遞給require的參數,須要爲駝峯命名,指向的是一個文件路徑,這裏和requireJS很相似的npm

模塊實現

Node中模塊實現分爲兩類,一種是系統級別的核心模塊,一種是用戶編寫的文件模塊
核心模塊在編譯過程被翻譯成了二進制文件,Node進程啓動後,一些核心的模塊會直接加載進內存(文件定位、編譯執行)
文件模塊須要動態加載,速度相對慢一點
可是一旦加載後,那些文件便會被緩存,二次引入時候便會讀取緩存文件(編譯後的文件)
這裏扯遠一點,咱們在使用underscore過程當中,會編譯Html造成模板函數(他真的只是一個函數),其實這個就能夠作緩存
在部署項目以前保存編譯事後的函數,去掉html模板文件(優化效果不知)編程

在node中,每一個模塊都是一個對象:

function Module(id, parent) {
  this.id = id;
  this.exports = {};
  //parent是關鍵字,不該該亂用
  this.parent = parent;
  if (parent && parent.children) {
    parent.children.push(this);
  }
  this.filename = null;
  this.loaded = false;
  this.children = [];
}

編譯和執行時引入文件模塊的最後一個階段,定位到具體文件後,node會新建一個模塊對象,而後根據路徑載入並編譯
每個編譯成功的模塊都會將其文件路徑做爲索引緩存在Module._cache上

每一個模塊文件都存在require、exports、module三個變量,可是在文件中並未定義(__filename__、__dirname__ 變量也是)
其實在編譯過程當中,Node對javascript文件內容進行了頭尾包裝(至關於自定義函數傳入window)

(function (exports, require, module, __filename__, __dirname__) { 
  var math = require('math');
  exports.area = function (radius) {
    return '';
  };
});

這樣,模塊與模塊之間作了隔離,不會互相影響,這裏和underscore的編譯有些相似......

包與NPM

Node組織了自身的核心模塊,因此第三方文件模塊能夠有序的編寫和使用,可是在第三方模塊中,模塊與模塊之間仍然散列在各地
相互之間不能直接引用,在模塊外包和NPM則是將聯繫創建起來的一種機制
PS:不少模塊會造成一個包,這個包的概念和java包的概念,才#程序集的概念應該類似

一個包結構解壓後會造成幾個文件:
① package.json 描述文件
② bin 可執行二進制目錄
③ lib javascript代碼目錄
④ doc 文檔(尼瑪基本沒有)
⑤ test demo

以上都是CommonJS包的規範的一些東西,可是咱們稍微瞭解一下即可(初學嘛),NPM則須要熟練掌握,藉助NPM咱們能夠熟練安裝管理包

安裝依賴包
安裝依賴包是經常使用方法:

npm install express

執行後就會在當前目錄下建立node_modules目錄,而後再其下面建立express目錄......
PS:express是NodeJs上流行的web開發框架,幫助咱們快速開發一個web應用
安裝結束後就可調用了:

var express = require('express');

結語

這段簡單結束,後面咱們項目實戰過程逐步深化

相關文章
相關標籤/搜索