最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

NodeJs特點(diǎn)

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

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

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

模塊機(jī)制/CommonJs

我們原來做服務(wù)器端的開發(fā),如果沒有很好的組織代碼的話,后期維護(hù)非常困難,所以才會(huì)有什么MVC,什么三層架構(gòu)
而現(xiàn)在前端的業(yè)務(wù)邏輯逐向后端靠攏,就單頁應(yīng)用來說,已經(jīng)超過后端的程序邏輯
頁面view不停的增加會(huì)帶來js代碼量的激增,如何很好的管理我們的前端代碼成了一個(gè)問題,所以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í)別的核心模塊,一種是用戶編寫的文件模塊
核心模塊在編譯過程被翻譯成了二進(jìn)制文件,Node進(jìn)程啟動(dòng)后,一些核心的模塊會(huì)直接加載進(jìn)內(nèi)存(文件定位、編譯執(zhí)行)
文件模塊需要?jiǎng)討B(tài)加載,速度相對慢一點(diǎn)
但是一旦加載后,那些文件便會(huì)被緩存,二次引入時(shí)候便會(huì)讀取緩存文件(編譯后的文件)
這里扯遠(yuǎn)一點(diǎn),我們在使用underscore過程中,會(huì)編譯Html形成模板函數(shù)(他真的只是一個(gè)函數(shù)),其實(shí)這個(gè)就可以做緩存
在部署項(xiàng)目之前保存編譯過后的函數(shù),去掉html模板文件(優(yōu)化效果不知)

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

復(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è)模塊對象,然后根據(jù)路徑載入并編譯
每一個(gè)編譯成功的模塊都會(huì)將其文件路徑作為索引緩存在Module._cache上

每個(gè)模塊文件都存在require、exports、module三個(gè)變量,但是在文件中并未定義(__filename__、__dirname__ 變量也是)
其實(shí)在編譯過程中,Node對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)系建立起來的一種機(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é)語

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

相關(guān)文章

  • node中使用es6/7/8(支持性與性能)

    node中使用es6/7/8(支持性與性能)

    這篇文章主要介紹了node中使用es6/7/8(支持性與性能),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    NodeJs環(huán)境中NODE_ENV介紹和設(shè)置方法

    這篇文章主要給大家介紹了關(guān)于NodeJs環(huán)境中NODE_ENV介紹和設(shè)置的相關(guān)資料,NODE_ENV其實(shí)就是環(huán)境變量之一,用于設(shè)置nodejs當(dāng)前的運(yùn)行環(huán)境,需要的朋友可以參考下
    2024-07-07
  • 查詢Node.js版本信息的六種方法

    查詢Node.js版本信息的六種方法

    隨著應(yīng)用程序規(guī)模越來越龐大,Node.js版本的更新也日益頻繁,本文主要介紹了查詢Node.js版本信息的六種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開發(fā)入門

    零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開發(fā)入門

    這篇文章主要介紹了零基礎(chǔ)搭建Node.js、Express、Ejs、Mongodb服務(wù)器及應(yīng)用開發(fā)入門,本文在windows8系統(tǒng)下完成本教程,其它系統(tǒng)也可參考,需要的朋友可以參考下
    2014-12-12
  • Node.js之HTTP服務(wù)端和客戶端實(shí)現(xiàn)方式

    Node.js之HTTP服務(wù)端和客戶端實(shí)現(xiàn)方式

    這篇文章主要介紹了Node.js之HTTP服務(wù)端和客戶端實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子

    利用yarn實(shí)現(xiàn)一個(gè)webpack+react種子

    其實(shí)以前就寫過如何使用React-router和Webpack快速構(gòu)建一個(gè)react程序。后來發(fā)現(xiàn)版本太老,于是乎最近又重新組織了下結(jié)構(gòu),使用最近發(fā)布的yarn作為包管理工具,介紹下基本安裝步驟,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法

    npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法

    在開發(fā)過程中經(jīng)常會(huì)使用npm安裝依賴包來加速開發(fā),但是在執(zhí)行npm install命令時(shí),有時(shí)會(huì)遇到各種錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法,需要的朋友可以參考下
    2023-05-05
  • Node.js  REPL (交互式解釋器)實(shí)例詳解

    Node.js REPL (交互式解釋器)實(shí)例詳解

    這篇文章主要介紹了Node.js REPL (交互式解釋器)實(shí)例詳解的相關(guān)資料,Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個(gè)電腦的環(huán)境,類似 Window 系統(tǒng)的終端,我們可以在終端中輸入命令,并接收系統(tǒng)的響應(yīng),需要的朋友可以參考下
    2017-08-08
  • 使用Raygun對Node.js應(yīng)用進(jìn)行錯(cuò)誤處理的方法

    使用Raygun對Node.js應(yīng)用進(jìn)行錯(cuò)誤處理的方法

    這篇文章主要介紹了使用Raygun對Node.js應(yīng)用進(jìn)行錯(cuò)誤處理的方法,Node.js是一款用于服務(wù)器端的JavaScript框架,需要的朋友可以參考下
    2015-06-06
  • node.js實(shí)現(xiàn)批量修改git項(xiàng)目的數(shù)據(jù)源(步驟詳解)

    node.js實(shí)現(xiàn)批量修改git項(xiàng)目的數(shù)據(jù)源(步驟詳解)

    文章介紹了如何使用Node.js腳本批量修改大型項(xiàng)目中各個(gè)項(xiàng)目的Git地址域名,通過引入模塊、聲明域名常量、定義遍歷函數(shù)和修改目錄等步驟,實(shí)現(xiàn)一次性批量修改,從而節(jié)省時(shí)間和精力
    2024-11-11

最新評論

谢通门县| 嘉祥县| 天长市| 和平区| 察雅县| 应用必备| 云阳县| 交城县| 郑州市| 仁怀市| 阜康市| 缙云县| 师宗县| 龙胜| 定襄县| 博罗县| 芒康县| 本溪| 通道| 科技| 呼和浩特市| 滦平县| 明光市| 梅河口市| 凤翔县| 元朗区| 斗六市| 且末县| 天柱县| 金堂县| 汝州市| 肥城市| 兰溪市| 城市| 洛隆县| 乐昌市| 商水县| 辽阳县| 阜康市| 阳江市| 扎鲁特旗|