NodeJs基礎(chǔ)(node+nmp)

NodeJs

用于服務(wù)器端開發(fā)蝙寨,是執(zhí)行js的ECMAScript標(biāo)準(zhǔn),不包含DOM和BOM喜德,但是部分API可以使用

webstorm與svn關(guān)聯(lián):

  1. 配置svn
  2. file-->settings-->version Control--> Subversion-->Use command line client 取消勾選

VCS-->checkout from version Control--> Subversion-->添加倉庫地址(默認(rèn)是http)--> 選擇存儲(chǔ)目錄

注意:文件名不要和與框架名稱(node nodeJs )一模一樣山橄。容易引起沖突

安裝命令行工具(非必需)

  1. 安裝命令行工具 slik Subversion

  2. 關(guān)聯(lián)webstorm:file-->settings-->version Contol--> Subversion-->Use command line client 勾選并且選擇路徑--svn.exe
    注意:安裝路徑:不要有空格,特殊字符舍悯,純英文

命令行窗口

別名:終端航棱、shell睡雇、小黑屏;
開啟:win+R -->cmd-->回車饮醇;
在Windows的命令行窗口中直接輸入DOS命令對(duì)計(jì)算機(jī)進(jìn)行操作

常用命令

  • dir 列出當(dāng)前目錄下的所有文件/文件夾
    • .\:表示當(dāng)前目錄
    • ..\:表示上一級(jí)目錄
  • cd 進(jìn)入到指定目錄中
    • cd ..\:返回上一級(jí)目錄
  • tab鍵 自動(dòng)補(bǔ)全
  • md+文件夾名:新建文件名
  • rd+文件夾名:刪除文件夾
  • x: (d:):切換到指定的磁盤

環(huán)境變量

指的是系統(tǒng)中需要使用的變量
path:用戶path和系統(tǒng)Path

  • 此環(huán)境變量中保存很多路徑它抱,多個(gè)路徑之間用 ; 隔開
  • 例如:%USERPROFILE%\AppData\Local\Microsoft\WindowsApps
  • 當(dāng)在命令行中訪問一個(gè)文件時(shí),系統(tǒng)首先會(huì)在當(dāng)前目錄下查詢文件朴艰,如果找到了观蓄,則直接使用;如果找不到祠墅,則依次去path環(huán)境變量中查詢蜘腌,如果找到了則直接使用,如果沒有找到饵隙,則繼續(xù)查詢下一個(gè)位置撮珠,直到找到為止,如果所有路徑都沒有找到該文件金矛,則報(bào)錯(cuò)(作用域相似)
  • 如果某個(gè)文件需要在任意位置都能訪問芯急,可以添加到環(huán)境變量中
    注意:添加環(huán)境變量之后需要重啟窗口;只需要指定到最終文件的文件夾

進(jìn)程&線路

打開 Windows任務(wù)管理器可看到進(jìn)程

進(jìn)程

  • 進(jìn)程中保存了程序要執(zhí)行所需要的一些必備的條件
  • 進(jìn)程相當(dāng)于工廠中的車間(工作計(jì)劃)

線程

  • 線程是CPU中的最小計(jì)算單位驶俊,程序需要通過線程來執(zhí)行
  • 線程就相當(dāng)于工廠中的工人
    • 單線程:程序由一個(gè)線程執(zhí)行娶耍,如JS、nodeJs是單線程
    • 多線程:程序由多個(gè)線程同時(shí)執(zhí)行 (并發(fā)問題)
      注意:多線程不一定就比單線程快

Node.js

node.js發(fā)展史

  • 瑞安·達(dá)爾 2009年 node的最初版本
  • 2010年1月Node的包管理器npm誕生
  • 2014年12月 ‘io.js’
  • 2015年9月 Node.js和io.js合并饼酿,Node4.0發(fā)布
    注意:Node.js 偶數(shù)版本是穩(wěn)定版本榕酒,奇數(shù)版本是開發(fā)版本;是對(duì)ECMAScript的實(shí)現(xiàn)故俐,BOM和DOM中大部分未實(shí)現(xiàn)

Nodejs簡介

單線程:主線程是單線程+I/O線程池想鹰;底層C++,大部分基本模塊是JavaScript药版;開發(fā)簡單/硬件要求低 優(yōu)化性能

  • 事件驅(qū)動(dòng):綁定事件
    • 服務(wù)器:接收用戶請(qǐng)求辑舷,處理,并返回響應(yīng)
      • 性能問題(速度)
      • 客戶端 <--請(qǐng)求/響應(yīng)--> Node服務(wù)器<--請(qǐng)求/響應(yīng)--> 服務(wù)器 <--I/O操作--> 數(shù)據(jù)庫(磁盤存儲(chǔ))
  • I/O操作 非阻塞
    • 阻塞 var a=10;alert(123);var b=20;
  • 異步I/O模型

用途:web服務(wù)API槽片;實(shí)時(shí)多人游戲何缓;后端的Web服務(wù),例如跨域还栓、服務(wù)器端的請(qǐng)求碌廓;基于Web的應(yīng)用;多客戶端的通信

安裝Node.js

  • 官網(wǎng)下載:https://nodejs.org/en/
  • 運(yùn)行Node.js
    • 命令行窗口 node
    • 退出:ctrl+c
  • 編寫js文件--->命令行窗口--->node 文件名.js
    WellcomeNodejs
  • 關(guān)聯(lián)webstorm:file--->settings--->Languages&Frameworks--->Node.js and NPM --->Node interpreter--->選擇node.js路徑
  • webstorm執(zhí)行js:Terminal/右鍵--->Run

node.js上的代碼

  • 代碼在服務(wù)器上運(yùn)行剩盒,用戶看不到
  • 編碼不用考慮兼容問題
  • webstorm開啟node核心代碼(驗(yàn)證node代碼):file--->settings--->Languages&Frameworks--->Node.js and NPM --->Coding Assistance--->enable

CommonJs規(guī)范

解決JavaScript的缺陷

ECMAScript5 標(biāo)準(zhǔn)的缺陷

  • 沒有模塊系統(tǒng) (計(jì)算機(jī)的組成就是模塊系統(tǒng))
    • jQuery 是模塊谷婆,并不是模塊系統(tǒng)
  • 標(biāo)準(zhǔn)庫較少 (官方定義沒有)
  • 沒有標(biāo)準(zhǔn)接口
  • 缺乏管理系統(tǒng) (對(duì)插件的管理)

模塊化

如果程序設(shè)計(jì)達(dá)到一定規(guī)模程度則必須進(jìn)行模塊化;模塊化有多種形式,但至少提供將代碼分割為多個(gè)源文件的機(jī)制

CommonJs規(guī)范

主要是為了彌補(bǔ)當(dāng)前JavaScript沒有模塊化標(biāo)準(zhǔn)的缺陷

CommonJS對(duì)模塊的定義十分簡單:

  • 模塊引用:在node中波材,通過var strName = require('string')函數(shù)來引入外部模塊股淡;

    • require()需要一個(gè)模塊的標(biāo)識(shí),來表示要引入的模塊廷区;在require()函數(shù)在引入模塊后唯灵,會(huì)返回一個(gè)對(duì)象作為返回值,這個(gè)對(duì)象就代表引入的模塊本身
    • 對(duì)于文件模塊(在項(xiàng)目中自己定義的模塊):需要使用模塊的絕對(duì)路徑隙轻,或者以.或..開頭(區(qū)別路徑和名字)的相對(duì)路徑來引入模塊
      注意:node中的模塊的代碼埠帕,都是運(yùn)行在獨(dú)立的函數(shù)中,不是直接運(yùn)行在全局作用域中玖绿;模塊中的變量和函數(shù)對(duì)于外部都是不可見的
      在node中有一個(gè)對(duì)象 global敛瓷,是node中的全局對(duì)象
    • 在全局中創(chuàng)建的變量都會(huì)作為global的屬性保存
    • 在全局中創(chuàng)建的函數(shù)都會(huì)作為global的方法保存
  • 模塊定義:一個(gè)js文件就是一個(gè)模塊,

    • 可以將希望保留給外部的變量和函數(shù)斑匪,添加給 exports或module.exports對(duì)象 的屬性和方法
  • 模塊標(biāo)識(shí):模塊的名字呐籽,通過標(biāo)識(shí)區(qū)分不同的模塊

    • 自定義的文件模塊都是使用文件的路徑作為標(biāo)識(shí)
    • 其他模塊都是使用模塊的名字作為標(biāo)識(shí):fs express mongoose shal 等等

證明js模塊化代碼在函數(shù)中運(yùn)行

全局中沒有,只有函數(shù)中有的參數(shù)
通過在模塊中打印 arguments 證明模塊運(yùn)行在一個(gè)函數(shù)中
arguments.callee 屬性代表的是當(dāng)前調(diào)用函數(shù)對(duì)象

當(dāng)模塊中的代碼執(zhí)行時(shí)蚀瘸,node會(huì)自動(dòng)在模塊的前邊添加如下代碼:function (exports, require, module, __filename, __dirname) { } 這樣模塊中的所有代碼就都被包含到一個(gè)函數(shù)中執(zhí)行狡蝶,所以函數(shù)中的變量和函數(shù)默認(rèn)外部都是不可訪問的

在函數(shù)中,node定義并傳遞如下幾個(gè)參數(shù)

  • exports
    • 導(dǎo)出的對(duì)象贮勃,通過它向外部暴露變量和函數(shù)
  • require
    • 函數(shù)贪惹,通過其引入外部的模塊
  • module
    • 對(duì)象,代表當(dāng)前的整個(gè)模塊
    • exports === module.exports //true
  • __filename
    • 字符串 E:\Code\myNode\text.js
    • 當(dāng)前模塊所在的完整路徑
  • __dirname
    • 字符串 E:\Code\myNode
    • 當(dāng)前模塊所在目錄的完整路徑

exports&module.exports 的區(qū)別

  • exports變量是對(duì)module.exports屬性的引用寂嘉,我們?cè)谙騟xports中添加屬性時(shí)奏瞬,本質(zhì)上是向module.exports中添加屬性
  • module.exports 可以直接通過賦值的形式來暴露內(nèi)容;
  • exports 不能直接賦值泉孩,只能通過 . 的形式賦值

包 package

將一組相關(guān)的模塊組合在一起硼端,形成一組完整的工具;本質(zhì)是 一個(gè)文件夾
commonJS包規(guī)范由包結(jié)構(gòu)和包描述文件
包結(jié)構(gòu):壓縮文件

  • package.json 包描述文件 JSON文件 必需
  • bin 可執(zhí)行二進(jìn)制文件
  • lib js代碼
  • doc 文檔
  • test 單元測試

NPM(Node Package Manager)

包規(guī)范的其中一種實(shí)踐
借助NPM棵譬,Node與第三方模塊之間形成很好一個(gè)生態(tài)系統(tǒng)

NPM鏡像 npm install -g cnpm --registry=https://registry.npm.taobao.org
用cnpm 代替 npm;

NPM命令

  • npm -v :查看版本
  • npm :幫助說明
  • npm search packagefile

NPM

  • 安裝Node.js之后NPM就可以使用显蝌,和Node.js綁定安裝
  • node包操作的第三方模塊的發(fā)布预伺、安裝和依賴
  • 對(duì)node包搜索订咸、下載、安裝酬诀、刪除脏嚷、上傳

指令

  • npm -v 查看npm版本
  • npm search packagefile
    • 簡寫 npm s packagefile


      NPM
  • npm install packagefile
    • 下載時(shí)會(huì)在當(dāng)前目錄下查詢 package.json
    • 簡寫 npm i packagefile
  • npm install packagefile --save
    • 安裝指定包并添加到package.json的dependencies中
  • npm install packagefile -g
    • 全局安裝(安裝工具類)
  • npm init:初始化 配置package.json文件
    • name 文件名 不能有大寫字母
    • version
    • description
    • entry point:初始入口
    • test command
    • git repository
    • keywords
    • author
    • license
  • npm install:安裝項(xiàng)目中的所有依賴
    • 簡寫 npm i
  • npm remove packagefile:刪除包
    • 簡寫 npm r packagefile
  • cnpm 是 npm 在國內(nèi)對(duì)其的鏡像文件庫

webstorm中使用npm

  1. Terminal:打開小窗口
  2. cd targetPath:進(jìn)入指定路徑
  3. npm i packagefile:安裝需要的包
  4. 引入包文件,var pName = require('packageName')
  5. 調(diào)用方法
    node查詢模塊:當(dāng)在node中引入一個(gè)外部模塊時(shí)瞒御,需要通過模塊的標(biāo)識(shí)來引入模塊父叙,node會(huì)自動(dòng)根據(jù)模塊標(biāo)識(shí)去搜索模塊;首先node會(huì)去當(dāng)前文件所在目錄的node_modules文件夾去查詢標(biāo)識(shí)模塊,如果有趾唱,則直接對(duì)其使用涌乳;如果沒有,則去當(dāng)前目錄的上一級(jí)目錄的node_modules查詢甜癞,如果有則使用夕晓,如果沒有則繼續(xù)去上一級(jí)查詢直到找到為止;如果根目錄都沒有找到悠咱,則報(bào)錯(cuò)蒸辆。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市析既,隨后出現(xiàn)的幾起案子躬贡,更是在濱河造成了極大的恐慌,老刑警劉巖眼坏,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拂玻,死亡現(xiàn)場離奇詭異,居然都是意外死亡宰译,警方通過查閱死者的電腦和手機(jī)纺讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囤屹,“玉大人熬甚,你說我怎么就攤上這事±呒幔” “怎么了乡括?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長智厌。 經(jīng)常有香客問我诲泌,道長,這世上最難降的妖魔是什么铣鹏? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任敷扫,我火速辦了婚禮,結(jié)果婚禮上诚卸,老公的妹妹穿的比我還像新娘葵第。我一直安慰自己,他們只是感情好合溺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布卒密。 她就那樣靜靜地躺著,像睡著了一般棠赛。 火紅的嫁衣襯著肌膚如雪哮奇。 梳的紋絲不亂的頭發(fā)上膛腐,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音鼎俘,去河邊找鬼哲身。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贸伐,可吹牛的內(nèi)容都是我干的律罢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棍丐,長吁一口氣:“原來是場噩夢啊……” “哼误辑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歌逢,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤巾钉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秘案,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砰苍,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年阱高,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赚导。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赤惊,死狀恐怖吼旧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情未舟,我是刑警寧澤圈暗,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站裕膀,受9級(jí)特大地震影響员串,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昼扛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一寸齐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抄谐,春花似錦渺鹦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挣惰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憎茂。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工珍语, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竖幔。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓板乙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拳氢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子募逞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Node.js是目前非常火熱的技術(shù)馋评,但是它的誕生經(jīng)歷卻很奇特放接。 眾所周知,在Netscape設(shè)計(jì)出JavaScri...
    w_zhuan閱讀 3,613評(píng)論 2 41
  • Node.js是目前非沉籼兀火熱的技術(shù)纠脾,但是它的誕生經(jīng)歷卻很奇特。 眾所周知蜕青,在Netscape設(shè)計(jì)出JavaScri...
    Myselfyan閱讀 4,071評(píng)論 2 58
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,078評(píng)論 0 1
  • 個(gè)人入門學(xué)習(xí)用筆記苟蹈、不過多作為參考依據(jù)。如有錯(cuò)誤歡迎斧正 目錄 簡書好像不支持錨點(diǎn)右核、復(fù)制搜索(反正也是寫給我自己看...
    kirito_song閱讀 2,469評(píng)論 1 37
  • 強(qiáng)調(diào)stress emphasize highlight underline 根本原因underlying mod...
    蘇醒7閱讀 430評(píng)論 0 0