NODE
- node官網
- node中文網
- 什麼是 node
- Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
- Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運作環境。
- 這個是 node 官網的解釋
- 其實 node 就是用 javascript 語言寫 後端
- 也就是說,我們的 javascript 有了 node 以後,不光是一個前端語言,也是一個後端語言
- 前端 javascript
- 三大核心
- ECMAScript
- DOM
- BOM
- 操作内容
- 浏覽器
- 解決相容問題
- 後端 javascript (node)
- 核心
- ECMAScript
- 操作内容
- 後端代碼
- 資料庫
- 核心
- 也就是說,node 我們不需要解決相容問題,不需要 DOM 和 BOM,隻關注業務邏輯就可以了
下載下傳 node 安裝包
- 我們的電腦是沒有自帶 node 環境的
- 需要我們手動下載下傳一個 node 安裝包,安裝 node 環境
- 有了 node 環境以後,我們就可以運作 node 了
- 下載下傳方式
- 直接到 node官網 或者 node中文網
- 點選下載下傳就可以
- 注意: 在 node 中文網下載下傳的時候,選擇安裝包,不要選擇 二進制檔案
- 因為 二進制檔案 是一個簡單版,我們需要自己配置 環境變量 才可以使用
安裝 node 環境
- 下載下傳好以後,我們直接把下載下傳好的檔案輕按兩下運作就行
- 安裝的路徑初學者建議預設路徑哦
- 找到 node-v10.16.2-x64.msi 對應的檔案
- 這個時候 node 就安裝完畢了
檢測安裝環境
- 檢測安裝是否成功
- 我們打開運作視窗 (win + r)
- 就是我們鍵盤下面那個 windows 的視窗鍵 + r 鍵
- 寫入 cmd 然後按下回車,來到我們的指令行
-
然後再指令行寫入一個指令
$ node -v
- 然後按下回車,會得到一個 node 的版本号
- 能看到版本号表示 node 環境安裝成功
- 至此,我們的 node 環境就有了
- 我們就可以再電腦裡面運作我們的 node 了
node 初體驗
- 到現在,我們的 node 環境已經安裝完畢了
- 接下來我們就體驗一下 node
- 我們的 node 到底是一個什麼東西
- 就是直接在 終端(指令行) 中運作 js 代碼
- 也可以用 .js 檔案寫一堆 js 代碼
- 然後不需要浏覽器,直接讓我們寫的 js 代碼運作在我們自己電腦的終端上
直接在終端中書寫 js 代碼
- 打開指令行
-
書寫指令
$ node
- 直接按下回車,會看到 光标在閃爍,我們就進入了 node 代碼編寫環境
- 直接書寫代碼就可以了
在指令行運作一個 js 檔案
- 先建立一個檔案夾
- 在裡面寫一個 js 檔案
- 我這裡預設在 桌面/demo檔案夾/idnex.js
-
在檔案裡面寫一些 js 代碼
// index.js
console.log(‘hello node’)
- 打開指令行,要讓指令行的路徑和你存放這個要執行的 js 檔案的目錄一緻
-
切換好以後,我們直接使用指令來運作我們準備好的 js 檔案
$ node index.js
- 然後就會在指令行把我們剛才寫的 js 檔案運作了
- 就會在控制台輸出 hello node
- 現在我們就已經運作了一段 js 代碼在指令行了
- 這也就解釋了一下最開始官網說的那句話
- Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運作環境。
- 我們的 node 安裝完畢以後,就在指令行提供了一個基于 Chrome V8 引擎的運作環境
- 在這個環境中運作 javascript 代碼
- 這個就是 node.js
- Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運作環境。
常用的 LINUX 操作
- 什麼是 LINUX 操作
- 其實就是在指令行使用指令來操作我們的電腦
- 因為我們的 node 就是在指令行運作 js
- 是以我們要了解一些常用的指令行指令
目錄操作
- 目錄操作就是操作我們的指令行路徑
-
檢視目前目錄下所有檔案
$ dir
-
以樹狀結構展示目前目錄下的所有檔案及子目錄下的所有檔案
$ tree
-
進入目前目錄下的某一個目錄
$ cd 檔案夾名稱
-
傳回上一級目錄
$ cd …
-
切換盤符
$ 盤符:
$ d:
-
檔案操作
- 檔案操作就是通過指令建立檔案或者檔案夾
-
建立檔案夾
# 表示在目前目錄下建立一個叫做 test 的檔案夾
$ md test
-
移除檔案夾
# 表示移除目前檔案夾下的 test 檔案夾
$ rd test
-
複制檔案夾
# 表示複制一份 test 檔案夾起名為 test2
$ xcopy test test2
-
建立檔案
# 表示在目前目錄下建立一個叫做 index.js 的檔案
$ type nul> index.js
-
拷貝一份檔案
# 表示複制一份 index.js 檔案起名為 ceshi.js
$ copy index.js ceshi.js
-
向文本中寫入内容
# 表示向 index.js 中寫入一段文本 console.log(‘hello world’)
$ echo console.log(“hello world”) > index.js
-
檢視檔案内的文本内容
# 表示檢視 index.js 檔案中的文本内容是什麼
$ type index.js
-
給檔案或者目錄重命名
# 表示把 index.js 更名為 abc.js
$ ren index.js abc.js
-
删除檔案
# 表示把目前目錄下的 index.js 删除
$ del index.js
-
移動檔案或檔案夾
# 表示把目前目錄下的 index.js 檔案移動到目前目錄下的 a 檔案夾下
$ move index.js a
-
其他指令
- 做一些其他事情的時候使用的
-
清屏
# 表示把目前螢幕的所有内容都清除
$ cls
-
檢視目前電腦 IP 資訊
# 表示檢視目前電腦的 IP 資訊
$ ipconfig
-
測試某一個連結位址的網速
# 表示檢視通路 百度 網站的速度
$ ping www.baidu.com
-
檢視電腦資訊
# 表示檢視目前電腦的資訊
$ systeminfo
-
NODE 的導入導出
- node 的開發是子產品化開發
- 每一個 js 檔案都是一個獨立的子產品
- 都有自己獨立的作用域
- 我們可以通過 導入導出 的方式把多個 js 檔案合并在一起
導入
-
在 node 裡面,我們使用 require 來導入一個檔案
// 我是 index.js 檔案
require(’./a.js’)
console.log('我是 index.js 檔案')
- 當我在指令行運作 index.js 檔案的時候
- 首先會把 a.js 檔案運作一遍
- 然後再繼續執行我自己檔案内部的代碼
-
也可以再導入的時候接受另一個檔案導出的内容
// a 接受到的内容就是 a.js 這個檔案導出的内容
// 如果 a.js 檔案中什麼都沒有導出,那麼接受到的就是一個 空對象
const a = require(’./a.js’)
導出
- 我們在寫一個 js 檔案的時候,可以向外導出一些内容
-
将來在這個檔案被導入的時候,就可以接受到一些内容
// 我是 a.js
// 每一個 js 檔案都會有一個對象叫做 module // 在 module 裡面有一個成員,叫做 exports // 每一個 js 檔案會預設把 module.exports 導出 // 也就是說,我們向 module.exports 中添加什麼内容 // 那麼就會導出什麼内容 module.exports.name = 'Jack' module.exports.age = 18
-
将來這個檔案被導入的時候,接受到的内容就是一個對象,裡面有兩個成員
// 我是 index.js
const a = require('./a.js') console.log(a) // { name: 'Jack', age: 18 }
子產品化
- 在 node 的開發過程中
- 我們是把每一個功能獨立做成一個子產品
- 然後在使用 導入導出 的方式把他們關聯在一起
- 利于維護
- 準确定位
- 我們一般把子產品分為三種
- 内置子產品 (node 天生就帶有的子產品)
- 自定義子產品 (我們自己寫的檔案)
- 第三方子產品 (從網上下載下傳的别人寫好的子產品)
NODE 常用的内置子產品
- 剛才是我們自己寫的子產品
- 現在我們來聊聊常見的内置子產品
##FS 子產品
- fs 是 node 的一個内置子產品
- 專門用來操作檔案的
-
使用的時候直接導入就可以使用了
const fs = require(‘fs’)
// 接下來就可以使用 fs 這個變量去操作檔案了
異步讀取檔案内容
-
異步的讀取某一個檔案内的内容
const fs = require(‘fs’)
// 因為是異步讀取,是以要在回調函數裡面擷取結果 fs.readFile('./text.txt', 'utf8', function (err, data) { // err 表示讀取的時候出現的錯誤 // data 表示讀取到的内容,如果出現錯誤,那麼是 data 是沒有内容的 })
同步讀取檔案内容
-
同步讀取某一個檔案的内容
const fs = require(‘fs’)
// 因為是同步讀取,是以直接以傳回值的形式接收讀取的内容就可以 const res = fs.readFileSync('./text.txt', 'utf8') // 同步讀取的時候,如果出錯會直接在控制台報錯,并中斷程式繼續執行 // 如果沒有錯誤,res 就會得到檔案中的内容
異步寫入檔案
-
異步的向某一個檔案中寫入内容
const fs = require(‘fs’)
// 寫入内容的時候,一般不會出現錯誤 // 因為如果沒有這個檔案的話,會建立一個這個檔案在向裡面寫入内容 // 是以回調函數一般沒什麼用處,隻不過是在寫入檔案結束後做些事情而已 // 雖然沒有用處,但是必須要寫 fs.writeFile('./text.txt', '我是要寫入的内容', function () { console.log('寫入完成') })
同步寫入檔案
-
同步的向某一個檔案内寫入内容
const fs = require(‘fs’)
// 因為是寫入檔案 // 沒有傳回值,因為一般都會寫入成功 fs.writeFileSync('./text.txt', '我是要寫入的内容')
HTTP 子產品
- 因為 node 是一個服務端語言
- 是以 node 一定也可以開啟一個伺服器,開啟一個服務
- http 這個子產品就是專門用來開啟服務,并且接受請求,傳回響應的
-
http 也是一個内置子產品,直接導入使用就行
const http = require(‘http’)
// 接下來就可以使用 http 這個子產品去開啟服務了
建立一個服務
-
要開啟先要建立一個服務
const http = require(‘http’)
// 建立一個服務 // 這個服務預設監聽 http 協定 // 這個服務預設監聽 localhost 域名 // 傳回值就是這個服務 const server = http.createServer(function (request, response) { // 前端發來的每一個請求都會觸發這個函數 // request 包含着所有的請求資訊 // response 是所有的響應資訊 })
監聽一個端口
-
确定這個服務監聽哪一個端口
const http = require(‘http’)
// 建立一個服務 const server = http.createServer(function (request, response) { // 前端發來的每一個請求都會觸發這個函數 }) server.listen(8080, function () { // 這個函數會在服務開啟成功以後執行 console.log('lintening on port 8080') })
給出一個響應
-
簡單給出一個響應
const http = require(‘http’)
// 建立一個服務 const server = http.createServer(function (request, response) { // 前端發來的每一個請求都會觸發這個函數 // 接受到請求以後給出一個響應 response.end('hello world') }) server.listen(8080, function () { // 這個函數會在服務開啟成功以後執行 console.log('lintening on port 8080') })
- 此時,打開浏覽器
- 位址欄輸入 localhost:8080
- 浏覽器就會響應文字 hello world
NPM
- 在我們安裝 node 的環境的時候,會自動幫我們一起安裝一個 npm 環境
- 就好像我們安裝一些軟體的時候,會自動在幫我們安裝一些什麼 xxx軟體管家/xxx遊戲 之類的東西
- 但是 npm 不是垃圾軟體,而是一個我們超級實用的工具
檢測是否安裝
- 和檢測 node 一樣
-
在指令行輸入指令
$ npm -v
- 能夠得到一個版本号就可以了
了解 npm
- 什麼是 npm 呢
- 我們可以把他想象成一個大超市,一個裝着所有我們需要用到的 插件/庫/架構 的超市
- 我們要下載下傳一個 jQuery-validation 插件
- 我們可以選擇去官網進行下載下傳
- 可以選擇去 GitHub 上查找并下載下傳
- 也可以選擇直接在指令行用 npm 下載下傳
- 我們要下載下傳一個 bootstrap
- 我們可以選擇去官網進行下載下傳
- 可以選擇去 GitHub 上查找并下載下傳
- 也可以選擇直接在指令行用 npm 下載下傳
- 也就是說,npm 包含着我們所有的第三方的東西
- 我們需要的時候,隻要打開終端,就可以使用指令來幫我們下載下傳
- 再也不需要去官網找了
- 而且,npm 不光可以在後端使用,也可以在前端使用
- npm 隻不過是一個依賴于 node 環境的大型的包管理器
使用 npm
- 我們想使用 npm 隻要打開指令行就可以了
- 作為一個 包管理器
- 可以幫我們下載下傳一些 插件 庫 架構 之類的東西供我們使用
下載下傳包
- 打開指令行
-
輸入下載下傳的指令
# 表示使用 npm 這個工具下載下傳一個 jquery
$ npm install jquery
- 下載下傳完畢以後,就會在目前目錄下多出一個檔案夾
- 叫做 node_modules
- 在這個目錄下就會有一個檔案夾叫做 jquery
- 就是我們需要的東西了
- npm 的下載下傳預設是下載下傳最新版本的包
-
我們也可以在下載下傳的時候指定一下我要下載下傳哪一個版本
# 表示使用 npm 這個工具下載下傳一個 3.3.7 版本的 jquery
$ npm install bootstrap[email protected]
删除包
- 在删除包的時候,我們可以直接去 node_modules 檔案夾中找到對應的包的檔案夾删除掉
-
但是這樣做并不好,我們還是應該使用指令行的指令來删除包
# 表示我要删除 jquery 這個包
$ npm uninstall jquery
- 這樣,這個包就會被解除安裝了
管理項目
- 我們的每一個項目都有可能需要依賴很多的包(有插件/庫/架構)
- npm 會幫助我們記錄,我們目前這個項目所使用的包
- 但是前提是,你要告訴 npm 說: “你來幫我管理整個檔案夾”
-
我們依舊是使用指令在指令行來告訴 npm
# 表示告訴 npm 你來幫我們管理整個檔案夾(也就是我的整個項目)
$ npm init
npm 清除緩存
- 有的時候,有些包下載下傳到一半,因為各種原因失敗了(比如突然沒有網了)
- 那麼這個下載下傳了一半的包 有可能 會被緩存下來
- 那麼以後你再次下載下傳的時候,就都是失敗的狀态
-
那麼我們就要清除掉緩存以後,在重新下載下傳
# 表示清除 npm 的緩存
$ npm cache clear -f
NRM
- 我們的 npm 雖然好用
- 但是有一個缺點
- 就是,他雖然在幫我們下載下傳東西
- 但是他的下載下傳位址是在國外
- 也就是說,每次使用 npm 下載下傳的時候,都是去國外的伺服器上進行下載下傳
- 那麼就會有很多不穩定的因素
- 而且相對時間比較長
- nrm 就是一個用來切換 npm 下載下傳位址的工具(切換鏡像源工具)
安裝 NRM
- nrm 如果想使用,那麼需要我們自己安裝一下
- 因為是我們的工具,是以使用 npm 就可以安裝
- 依舊是使用指令的方式來進行安裝
- 隻不過這裡要把這個 nrm 安裝成一個全局的依賴,而不再是項目内部的依賴了
- 全局依賴,一個電腦安裝一次,就一直可以使用
-
我們使用指令安裝一個全局 nrm
# 表示安裝一個全局 nrm
$ npm install --global nrm
檢測安裝
- 安裝完畢之後,我們檢測一下是否安裝成功
- 和檢測 node npm 的時候一樣
-
在指令行使用指令檢視一下版本号
$ nrm --version
- 能出現版本号,表示安裝成功
使用 nrm
- nrm 裡面存着好幾個鏡像源位址
- 我們要挑一個比較快的使用
檢測鏡像源位址
-
我們直接在指令行使用指令來檢視所有鏡像源位址的網速
# 表示檢視 nrm 鏡像源位址網速
$ nrm test
切換鏡像源
- 我們檢測完畢以後,就直到哪個比較快了
-
我們就使用指令切換一下鏡像源位址就好了
# 表示切換到 taobao 鏡像源位址
$ nrm use taobao