nodejs教程之入門,nodejs教程

來源:互聯網
上載者:User

nodejs教程之入門,nodejs教程

前言

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

NodeJs特點

① 非同步
從檔案讀取到網路請求,NodeJs皆以非同步完成,回呼函數佔據重要作用,在編程模型上Node是領先的

② 事件回調
事件回調讓程式變得輕巧,但是具體怎麼樣還是取決於程式員。但是回呼函數在閱讀上其實還是有一定難度的

③ 單線程
Node是單線程的,如果多線程的話,這門語言水又深了,問幾句進程中的通訊時很討厭的,但線程也沒有死結等問題
但是效能相關就有問題了,因為不能利用多核;

模組機制/CommonJs

我們原來做伺服器端的開發,如果沒有很好的組織代碼的話,後期維護非常困難,所以才會有什麼MVC,什麼三層架構
而現在前端的商務邏輯逐向後端靠攏,就單頁應用來說,已經超過後端的程式邏輯
頁面view不停的增加會帶來js代碼量的激增,如何很好的管理我們的前端代碼成了一個問題,所以requireJs出現了......
PS:尼瑪這段和nodeJs有一毛錢關係哇......
javascript是沒有模組化系統的,於是就有CommonJs的提出,讓js具備開發大型應用的基礎

模組引用

我們如果要引用一個模組,比如數學計算相關:

var math = require('math');

模組定義

我們如果要定義自己的模組可以這樣幹

複製代碼 代碼如下:
exports.add = function () {
  return sum;
}

如果此函數在math中定義的話,就能使用了

math.add();

模組標識

模組標識就是傳遞給require的參數,需要為駝峰命名,指向的是一個檔案路徑,這裡和requireJS很類似的

模組實現

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');

結語

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.