Node.js入門學習

Node.js學習

官方定義:

  • Node.js運行環(huán)境是在Chrome的V8 JavaScript引擎上. Node.js應用事件驅動,無阻塞I/O模型,所以輕量級且高效硼讽。
    Node.js的包管理npm风宁,是最大的開源生態(tài)庫越除。

對于寫在瀏覽器里面的JavaScript抗果,瀏覽器充當了解析器的角色。而對于需要獨立運行切黔,Node.js就是一個解析器暮的。每一種解析器都是一個運行環(huán)境,不但允許JS定義各種數(shù)據(jù)結構感挥,進行計算缩搅,還允許JS使用運行環(huán)境提供的內置對象和方法做一些事情。例如運行在瀏覽器
中的JS可以操作DOM触幼,瀏覽器就提供了document之類的內置對象硼瓣。而運行有Node.js中的JS是服務器端JS,可以操作系統(tǒng)文件和搭建HTTP服務器置谦,相應提供了fs堂鲤、http等內置對象。

安裝Node.js

macOS

    brew install node

Windows霉祸,?Node.js中文網, 下載Node.js安裝.(盡量保證安裝路徑不要有空格筑累,或者中文)

Paste_Image.png

Node.js的安裝會把?nodejs和npm命令加到PATH里面去,所以在命令行里面能夠訪問到node和npm

Paste_Image.png

檢查node版本及npm版本

Paste_Image.png

如何運行

打開終端丝蹭,鍵入node進入命令交互模式慢宗,輸入".exit"退出node命令交互模式

Paste_Image.png

可以輸入一條代碼語句后立即執(zhí)行并顯示結果,例如:

Paste_Image.png

如果要運行一大段代碼的話奔穿,可以先寫一個JS文件再運行镜沽。例如有以下hello.js

Paste_Image.png

寫好后在終端下鍵入node hello.js
運行,結果如下:

Paste_Image.png

熟悉windows以下幾個命令

  • tab(鍵) 自動補全命令
  • dir 列出當前文件夾下的文件
  • cls 清屏
  • cd 目錄操作 cd..返回上一級目錄 cd 目錄名進入下級目錄
  • mkdir 創(chuàng)建目錄
  • 向上鍵贱田,向上鍵找到歷史命令
    當前在C盤缅茉,如果想去到D盤的目錄,先D:
    注node交互模式下不能運行命令行命令男摧。

模塊

編寫稍大一點的程序時一般都會將代碼模塊化蔬墩。在NodeJS中,一般將代碼合理拆分到不同的JS文件中耗拓,每一個文件就是一個模塊拇颅,而文件路徑就是模塊名。
在編寫每個模塊時乔询,都有require exports module三個預先定義好的變量可供使用樟插。

require

require函數(shù)加載別的模塊。“./"開頭相對當前目錄黄锤,字符開頭表示內置模塊或者NODE_PATH下的模塊

    var foo1 = require('./foo');

exports

exports導出模塊的公有方法和屬性. 別的模塊通過require函數(shù)使用當前模塊時得到的就是當前模塊的exports
對象搪缨。以下例子中導出了一個公有方法。

exports.hello =  function () {
    console.log('hello world');
}

var fn=require("./hello");
fn.hello();

module

通過module對象可以訪問到當前模塊的一些相關信息鸵熟,但最多的用途是替換當前模塊的導出對象副编。例如模塊導出對象默認是一個普通對象,如果想改成一個函數(shù)的話旅赢,可以使用以下方式齿桃。

module.exports = function(){
    console.log('hello world');
}

var hello=require("./hello");
hello();

以上代碼中,模塊默認導出對象被替換為一個函數(shù)煮盼。

HTTP服務器

var http = require('http');  
  
http.createServer(function (req, res) {  
  res.writeHead(200, {'Content-Type': 'text/plain'});  
  res.end('Hello World\n');  
}).listen(8080);  
  
console.log('Server running on port 8080.');
Paste_Image.png

NPM

NPM是隨同NodeJS一起安裝的包管理工具短纵,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:

  • 允許用戶從NPM服務器下載第三方包到本地使用
  • 允許用戶將自己編寫的包上傳到NPM服務器供別人用

可以看到僵控,NPM建立了一個NodeJS生態(tài)圈香到,NodeJS開發(fā)者和用戶可以在里邊互通有無。以下分別介紹這三種場景下怎樣使用NPM报破。

選裝cnpm

  • 說明:因為npm安裝插件是從國外服務器下載悠就,受網絡影響大,可能出現(xiàn)異常充易,如果npm的服務器在中國就好了梗脾,所以我們樂于分享的淘寶團隊干了這事。來自官網:“這是一個完整 npmjs.org 鏡像盹靴,你可以用此代替官方版本(只讀)炸茧,同步頻率目前為 10分鐘 一次以保證盡量與官方服務同步「寰玻”
  • 官方網址:http://npm.taobao.org
  • 安裝:命令提示符執(zhí)行
npm install cnpm -g --registry=https://registry.npm.taobao.org
  • 注意:安裝完后最好查看其版本號cnpm -v或關閉命令提示符重新打開梭冠,安裝完直接使用有可能會出現(xiàn)錯誤
Paste_Image.png

下載三方包

需要使用三方包時,首先得知道有哪些包可用改备。雖然npmjs.org提供了個搜索框可以根據(jù)包名來搜索控漠,但如果連想使用的三方包的名字都不確定的話,就請百度一下吧悬钳。知道了包名后盐捷,比如上邊例子中的jquery,就可以在工程目錄下打開終端默勾,使用以下命令來下載三方包碉渡。
安裝第三方包 "jquery" “--save”會保存包引入配置到package.json

npm install jquery --save

作為項目的開發(fā)依賴安裝

 npm install jquery --save-dev

下載好之后,jquery包就放在了工程目錄下的node_modules目錄中

Paste_Image.png

以上命令默認下載最新版三方包灾测,如果想要下載指定版本的話爆价,可以在包名后邊加上@<version>,例如通過以下命令可下載2.1.0版的jquery

Paste_Image.png

package.json

Node.js項目配置文件,在項目目錄下初始化package.json

npm init

package.json內容如下:

{
    "name":"demo",
    "main":"index.js" //定義入口文件
}

如果使用到的三方包比較多媳搪,在終端下一個包一條命令地安裝未免太人肉了铭段。因此NPM對package.json的字段做了擴展,允許在其中申明三方包依賴秦爆。因此序愚,上邊例子中的package.json可以改寫如下:

{
  "name": "learnnode",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "dependencies": {
    "jquery": "^2.1.0"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC"
}

到目前為此我們寫的Node.js都是應用在后臺。如果我們在前端項目里面引入Node.js管理等限,遇到需要npm包的時候爸吮,npm install就可以,不用管包的依賴望门。比如npm install a, a又依賴于b形娇,那么根據(jù)a的package.json聲明,安裝a的同時也會安裝b筹误。只需要一個npm install a桐早,我們不需要關心a背后的依賴。這就是前端工程化的一部分厨剪。前段時間我們學習Vue.js, 安裝Vue.js的時候哄酝,看到這樣的代碼

# 全局安裝 vue-cli
$ npm install -g vue-cli
# 創(chuàng)建一個基于 "webpack" 模板的新項目
$ vue init webpack my-project
# 安裝依賴,走你
$ cd my-project
$ npm install
$ npm run dev

webpack就是構建工具的一種祷膳,構建工具是用來實現(xiàn)前端工程化的陶衅。前端框架和包越來越多,在github上有找一些資源直晨,沒有構建工具都無法運行項目搀军。學習構建工具已經很緊迫了。但是前端工程化能做更多抡秆。接下來奕巍,重點介紹Gulp(Gulp和webpack能結合起來使用)。Gulp學習傳送門

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末儒士,一起剝皮案震驚了整個濱河市的止,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌着撩,老刑警劉巖诅福,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拖叙,居然都是意外死亡氓润,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門薯鳍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咖气,“玉大人,你說我怎么就攤上這事”老” “怎么了浅役?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伶唯。 經常有香客問我觉既,道長,這世上最難降的妖魔是什么乳幸? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任瞪讼,我火速辦了婚禮,結果婚禮上粹断,老公的妹妹穿的比我還像新娘符欠。我一直安慰自己,他們只是感情好瓶埋,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布背亥。 她就那樣靜靜地躺著,像睡著了一般悬赏。 火紅的嫁衣襯著肌膚如雪狡汉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天闽颇,我揣著相機與錄音盾戴,去河邊找鬼。 笑死兵多,一個胖子當著我的面吹牛尖啡,可吹牛的內容都是我干的。 我是一名探鬼主播剩膘,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衅斩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怠褐?” 一聲冷哼從身側響起畏梆,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奈懒,沒想到半個月后奠涌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡磷杏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年溜畅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片极祸。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡慈格,死狀恐怖怠晴,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情浴捆,我是刑警寧澤龄寞,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站汤功,受9級特大地震影響,放射性物質發(fā)生泄漏溜哮。R本人自食惡果不足惜滔金,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茂嗓。 院中可真熱鬧餐茵,春花似錦、人聲如沸述吸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝌矛。三九已至道批,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間入撒,已是汗流浹背隆豹。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茅逮,地道東北人璃赡。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像献雅,于是被迫代替她去往敵國和親碉考。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容

  • Node.js是目前非惩ι恚火熱的技術侯谁,但是它的誕生經歷卻很奇特。 眾所周知章钾,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,613評論 2 41
  • Node.js是目前非沉颊簦火熱的技術,但是它的誕生經歷卻很奇特伍玖。 眾所周知嫩痰,在Netscape設計出JavaScri...
    Myselfyan閱讀 4,072評論 2 58
  • JavaScript 模塊化編程 網站越來越復雜,js代碼窍箍、js文件也越來越多串纺,會遇到什么問題丽旅? 命名沖突; 文件...
    magic_pill閱讀 1,423評論 0 1
  • 總結一: [node.js總結](http://www.cnblogs.com/Darren_code/archi...
    xiumeiii閱讀 1,890評論 0 14
  • 近些年?關于中國傳統(tǒng)武術的爭議經久不衰纺棺,武術傳承過程中的怪相不只是現(xiàn)今社會才出現(xiàn)的榄笙。徐皓峰的《倭寇蹤跡》就為我們展...
    d55a31d8c39e閱讀 840評論 0 1