亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nodejs教程之入門

 更新時(shí)間:2014年11月21日 11:27:58   投稿:hebedich  
本文是nodejs教程系列的入門篇,主要講述nodejs的特點(diǎn)、模塊機(jī)制/CommonJs(模塊引用、模塊定義、模塊標(biāo)識(shí)、模塊實(shí)現(xiàn))、包與NPM等知識(shí),非常的詳細(xì),這里推薦給大家作為入門的文章。

前言

再不學(xué)nodeJs,我們就老了......在HTML5大浪襲來(lái)的時(shí)候,很多先輩就開始了NodeJs之旅,而那時(shí)我還在做服務(wù)器端的程序
后來(lái)轉(zhuǎn)成前端,和梯隊(duì)的距離已經(jīng)很大了,因?yàn)槲視?huì)服務(wù)器端語(yǔ)言,還干了很久,所以至今才開始學(xué)習(xí)NodeJs,向完整的前端前進(jìn)
這次學(xué)習(xí)NodeJs的計(jì)劃是:
① 1-2周學(xué)習(xí)基礎(chǔ)知識(shí)
② 1周左右開發(fā)一個(gè)簡(jiǎn)單項(xiàng)目
③ 利用NodeJs開發(fā)一套用于移動(dòng)端調(diào)試的工具
④ 打包相關(guān)(這個(gè)可能比較遠(yuǎn)了)

NodeJs特點(diǎn)

① 異步
從文件讀取到網(wǎng)絡(luò)請(qǐng)求,NodeJs皆以異步完成,回調(diào)函數(shù)占據(jù)重要作用,在編程模型上Node是領(lǐng)先的

② 事件回調(diào)
事件回調(diào)讓程序變得輕巧,但是具體怎么樣還是取決于程序員。但是回調(diào)函數(shù)在閱讀上其實(shí)還是有一定難度的

③ 單線程
Node是單線程的,如果多線程的話,這門語(yǔ)言水又深了,問(wèn)幾句進(jìn)程中的通信時(shí)很討厭的,但線程也沒有死鎖等問(wèn)題
但是性能相關(guān)就有問(wèn)題了,因?yàn)椴荒芾枚嗪耍?/p>

模塊機(jī)制/CommonJs

我們?cè)瓉?lái)做服務(wù)器端的開發(fā),如果沒有很好的組織代碼的話,后期維護(hù)非常困難,所以才會(huì)有什么MVC,什么三層架構(gòu)
而現(xiàn)在前端的業(yè)務(wù)邏輯逐向后端靠攏,就單頁(yè)應(yīng)用來(lái)說(shuō),已經(jīng)超過(guò)后端的程序邏輯
頁(yè)面view不停的增加會(huì)帶來(lái)js代碼量的激增,如何很好的管理我們的前端代碼成了一個(gè)問(wèn)題,所以requireJs出現(xiàn)了......
PS:尼瑪這段和nodeJs有一毛錢關(guān)系哇......
javascript是沒有模塊化系統(tǒng)的,于是就有CommonJs的提出,讓js具備開發(fā)大型應(yīng)用的基礎(chǔ)

模塊引用

我們?nèi)绻靡粋€(gè)模塊,比如數(shù)學(xué)計(jì)算相關(guān):

var math = require('math');

模塊定義

我們?nèi)绻x自己的模塊可以這樣干

復(fù)制代碼 代碼如下:

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

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

math.add();

模塊標(biāo)識(shí)

模塊標(biāo)識(shí)就是傳遞給require的參數(shù),需要為駝峰命名,指向的是一個(gè)文件路徑,這里和requireJS很類似的

模塊實(shí)現(xiàn)

Node中模塊實(shí)現(xiàn)分為兩類,一種是系統(tǒng)級(jí)別的核心模塊,一種是用戶編寫的文件模塊
核心模塊在編譯過(guò)程被翻譯成了二進(jìn)制文件,Node進(jìn)程啟動(dòng)后,一些核心的模塊會(huì)直接加載進(jìn)內(nèi)存(文件定位、編譯執(zhí)行)
文件模塊需要?jiǎng)討B(tài)加載,速度相對(duì)慢一點(diǎn)
但是一旦加載后,那些文件便會(huì)被緩存,二次引入時(shí)候便會(huì)讀取緩存文件(編譯后的文件)
這里扯遠(yuǎn)一點(diǎn),我們?cè)谑褂胾nderscore過(guò)程中,會(huì)編譯Html形成模板函數(shù)(他真的只是一個(gè)函數(shù)),其實(shí)這個(gè)就可以做緩存
在部署項(xiàng)目之前保存編譯過(guò)后的函數(shù),去掉html模板文件(優(yōu)化效果不知)

在node中,每個(gè)模塊都是一個(gè)對(duì)象:

復(fù)制代碼 代碼如下:

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

編譯和執(zhí)行時(shí)引入文件模塊的最后一個(gè)階段,定位到具體文件后,node會(huì)新建一個(gè)模塊對(duì)象,然后根據(jù)路徑載入并編譯
每一個(gè)編譯成功的模塊都會(huì)將其文件路徑作為索引緩存在Module._cache上

每個(gè)模塊文件都存在require、exports、module三個(gè)變量,但是在文件中并未定義(__filename__、__dirname__ 變量也是)
其實(shí)在編譯過(guò)程中,Node對(duì)javascript文件內(nèi)容進(jìn)行了頭尾包裝(相當(dāng)于自定義函數(shù)傳入window)

復(fù)制代碼 代碼如下:

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

這樣,模塊與模塊之間做了隔離,不會(huì)互相影響,這里和underscore的編譯有些類似......

包與NPM

Node組織了自身的核心模塊,所以第三方文件模塊可以有序的編寫和使用,但是在第三方模塊中,模塊與模塊之間仍然散列在各地
相互之間不能直接引用,在模塊外包和NPM則是將聯(lián)系建立起來(lái)的一種機(jī)制
PS:很多模塊會(huì)形成一個(gè)包,這個(gè)包的概念和java包的概念,才#程序集的概念應(yīng)該相似

一個(gè)包結(jié)構(gòu)解壓后會(huì)形成幾個(gè)文件:
① package.json 描述文件
② bin 可執(zhí)行二進(jìn)制目錄
③ lib javascript代碼目錄
④ doc 文檔(尼瑪基本沒有)
⑤ test demo

以上都是CommonJS包的規(guī)范的一些東西,但是我們稍微了解一下便可(初學(xué)嘛),NPM則需要熟練掌握,借助NPM我們可以熟練安裝管理包

安裝依賴包

安裝依賴包是常用方法:

npm install express
執(zhí)行后就會(huì)在當(dāng)前目錄下創(chuàng)建node_modules目錄,然后再其下面創(chuàng)建express目錄......
PS:express是NodeJs上流行的web開發(fā)框架,幫助我們快速開發(fā)一個(gè)web應(yīng)用
安裝結(jié)束后就可調(diào)用了:

復(fù)制代碼 代碼如下:

var express = require('express');

結(jié)語(yǔ)

這段簡(jiǎn)單結(jié)束,后面我們項(xiàng)目實(shí)戰(zhàn)過(guò)程逐步深化

相關(guān)文章

  • 利用yarn代替npm管理前端項(xiàng)目模塊依賴的方法詳解

    利用yarn代替npm管理前端項(xiàng)目模塊依賴的方法詳解

    這篇文章主要給大家介紹了關(guān)于利用yarn代替npm管理前端項(xiàng)目模塊依賴的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Cli Todo命令行todo工具使用演示

    Cli Todo命令行todo工具使用演示

    這篇文章主要為大家介紹了Cli Todo命令行todo工具使用演示示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • NodeJS加密解密及node-rsa加密解密用法詳解

    NodeJS加密解密及node-rsa加密解密用法詳解

    要用nodejs開發(fā)接口,實(shí)現(xiàn)遠(yuǎn)程調(diào)用,如果裸奔太危險(xiǎn)了,就在網(wǎng)上找了一下nodejs的加密,感覺node-rsa挺不錯(cuò)的,下面來(lái)總結(jié)一下簡(jiǎn)單的rsa加密解密用法,需要的朋友可以參考下
    2018-10-10
  • npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案

    npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org 

    這篇文章主要介紹了npm報(bào)錯(cuò):request to httpsregistry.npm.taobao.org failed, reason certificate has expired的解決方案,文中有詳細(xì)的解決方案,需要的朋友可以參考下
    2024-03-03
  • Nodejs 復(fù)制文件/文件夾的方法

    Nodejs 復(fù)制文件/文件夾的方法

    這篇文章主要介紹了Nodejs 復(fù)制文件/文件夾的方法,需要的朋友可以參考下
    2017-08-08
  • 關(guān)于Node.js中Buffer的一些你可能不知道的用法

    關(guān)于Node.js中Buffer的一些你可能不知道的用法

    網(wǎng)上關(guān)于Node.js中Buffer用法的文章有很多,但是感覺還是不夠詳細(xì),所以這篇文章主要介紹了關(guān)于Node.js中Buffer的一些你可能不知道的用法,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • gulp安裝以及打包合并的方法教程

    gulp安裝以及打包合并的方法教程

    這篇文章主要給大家介紹了關(guān)于gulp實(shí)現(xiàn)人一個(gè)打包合并的方法教程,并分享了gulp打包js/css時(shí)合并成一個(gè)文件時(shí)的順序的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 淺談Node.js 中間件模式

    淺談Node.js 中間件模式

    中間件在 Node.js 中被廣泛使用,它泛指一種特定的設(shè)計(jì)模式、一系列的處理單元、過(guò)濾器和處理程序,以函數(shù)的形式存在,這篇文章主要介紹了淺談Node.js 中間件模式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • NodeJs操作MYSQL方法詳細(xì)介紹

    NodeJs操作MYSQL方法詳細(xì)介紹

    本章將了解如何在nodejs中操作Mysql,實(shí)際項(xiàng)目中不可能用workbench來(lái)進(jìn)行增刪改查,而是用代碼操作,接下來(lái)我們講解一下如何在 nodejs中操作Mysql
    2022-08-08
  • Node.js實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán)的示例代碼

    Node.js實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán)的示例代碼

    在web開發(fā)中,我們常常需要對(duì)一些敏感的url進(jìn)行訪問(wèn)權(quán)限控制,本文主要介紹了Node.js實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán)的示例代碼,具有一定的參考價(jià)值,感興趣的了解一下
    2024-02-02

最新評(píng)論