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

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

轉(zhuǎn)自:http://www.itdecent.cn/p/f07c80d6a809

?Is_JackieZhang?關(guān)注

2017.11.01 19:21*?字?jǐn)?shù) 2592?閱讀 456評(píng)論 1喜歡 3

NodeJs

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

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

配置svn

file-->settings-->version Control--> Subversion-->Use command line client 取消勾選

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

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

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

安裝命令行工具 slik Subversion

關(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)在命令行中訪問(wèn)一個(gè)文件時(shí),系統(tǒng)首先會(huì)在當(dāng)前目錄下查詢文件,如果找到了,則直接使用;如果找不到,則依次去path環(huán)境變量中查詢,如果找到了則直接使用,如果沒(méi)有找到,則繼續(xù)查詢下一個(gè)位置,直到找到為止,如果所有路徑都沒(méi)有找到該文件,則報(bào)錯(cuò)(作用域相似)

如果某個(gè)文件需要在任意位置都能訪問(wèn),可以添加到環(huán)境變量中

注意:添加環(huán)境變量之后需要重啟窗口;只需要指定到最終文件的文件夾

進(jìn)程&線路

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

進(jìn)程

進(jìn)程中保存了程序要執(zhí)行所需要的一些必備的條件

進(jìn)程相當(dāng)于工廠中的車間(工作計(jì)劃)

線程

線程是CPU中的最小計(jì)算單位,程序需要通過(guò)線程來(lái)執(zhí)行

線程就相當(dāng)于工廠中的工人

單線程:程序由一個(gè)線程執(zhí)行,如JS、nodeJs是單線程

多線程:程序由多個(gè)線程同時(shí)執(zhí)行 (并發(fā)問(wèn)題)

注意:多線程不一定就比單線程快

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簡(jiǎn)介

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

事件驅(qū)動(dòng):綁定事件

服務(wù)器:接收用戶請(qǐng)求,處理,并返回響應(yīng)

性能問(wèn)題(速度)

客戶端 <--請(qǐng)求/響應(yīng)--> Node服務(wù)器<--請(qǐng)求/響應(yīng)--> 服務(wù)器 <--I/O操作--> 數(shù)據(jù)庫(kù)(磁盤存儲(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)行,用戶看不到

編碼不用考慮兼容問(wè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)的缺陷

沒(méi)有模塊系統(tǒng) (計(jì)算機(jī)的組成就是模塊系統(tǒng))

jQuery 是模塊,并不是模塊系統(tǒng)

標(biāo)準(zhǔn)庫(kù)較少 (官方定義沒(méi)有)

沒(méi)有標(biāo)準(zhǔn)接口

缺乏管理系統(tǒng) (對(duì)插件的管理)

模塊化

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

CommonJs規(guī)范

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

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

模塊引用:在node中,通過(guò)var strName = require('string')函數(shù)來(lái)引入外部模塊;

require()需要一個(gè)模塊的標(biāo)識(shí),來(lái)表示要引入的模塊;在require()函數(shù)在引入模塊后,會(huì)返回一個(gè)對(duì)象作為返回值,這個(gè)對(duì)象就代表引入的模塊本身

對(duì)于文件模塊(在項(xiàng)目中自己定義的模塊):需要使用模塊的絕對(duì)路徑,或者以.或..開頭(區(qū)別路徑和名字)的相對(duì)路徑來(lái)引入模塊

注意:node中的模塊的代碼,都是運(yùn)行在獨(dú)立的函數(shù)中,不是直接運(yùn)行在全局作用域中;模塊中的變量和函數(shù)對(duì)于外部都是不可見(jiàn)的

在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í):模塊的名字,通過(guò)標(biāo)識(shí)區(qū)分不同的模塊

自定義的文件模塊都是使用文件的路徑作為標(biāo)識(shí)

其他模塊都是使用模塊的名字作為標(biāo)識(shí):fs express mongoose shal 等等

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

全局中沒(méi)有,只有函數(shù)中有的參數(shù)

通過(guò)在模塊中打印?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)外部都是不可訪問(wèn)的

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

exports

導(dǎo)出的對(duì)象,通過(guò)它向外部暴露變量和函數(shù)

require

函數(shù),通過(guò)其引入外部的模塊

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 可以直接通過(guò)賦值的形式來(lái)暴露內(nèi)容;

exports 不能直接賦值,只能通過(guò) . 的形式賦值

包 package

將一組相關(guān)的模塊組合在一起,形成一組完整的工具;本質(zhì)是 一個(gè)文件夾

commonJS包規(guī)范由包結(jié)構(gòu)和包描述文件

包結(jié)構(gòu):壓縮文件

package.json 包描述文件 JSON文件?必需

bin 可執(zhí)行二進(jìn)制文件

lib js代碼

doc 文檔

test 單元測(cè)試

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 :幫助說(shuō)明

npm search packagefile

NPM

安裝Node.js之后NPM就可以使用,和Node.js綁定安裝

node包操作的第三方模塊的發(fā)布、安裝和依賴

對(duì)node包搜索、下載、安裝、刪除、上傳

指令

npm -v 查看npm版本

npm search packagefile

簡(jiǎn)寫 npm s packagefile

NPM

npm install packagefile

下載時(shí)會(huì)在當(dāng)前目錄下查詢 package.json

簡(jiǎn)寫 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)目中的所有依賴

簡(jiǎn)寫 npm i

npm remove packagefile:刪除包

簡(jiǎn)寫 npm r packagefile

cnpm 是 npm 在國(guó)內(nèi)對(duì)其的鏡像文件庫(kù)

webstorm中使用npm

Terminal:打開小窗口

cd targetPath:進(jìn)入指定路徑

npm i packagefile:安裝需要的包

引入包文件,var pName = require('packageName')

調(diào)用方法

node查詢模塊:當(dāng)在node中引入一個(gè)外部模塊時(shí),需要通過(guò)模塊的標(biāo)識(shí)來(lái)引入模塊,node會(huì)自動(dòng)根據(jù)模塊標(biāo)識(shí)去搜索模塊;首先node會(huì)去當(dāng)前文件所在目錄的node_modules文件夾去查詢標(biāo)識(shí)模塊,如果有,則直接對(duì)其使用;如果沒(méi)有,則去當(dāng)前目錄的上一級(jí)目錄的node_modules查詢,如果有則使用,如果沒(méi)有則繼續(xù)去上一級(jí)查詢直到找到為止;如果根目錄都沒(méi)有找到,則報(bào)錯(cuò)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容