柚子快報(bào)邀請(qǐng)碼778899分享:node.js學(xué)習(xí)記錄
柚子快報(bào)邀請(qǐng)碼778899分享:node.js學(xué)習(xí)記錄
1.什么是Node.js
(1)概念
官網(wǎng)解釋:Node.js是一個(gè)基于 Chrome V8 引擎 的 JavaScript 運(yùn)行時(shí)環(huán)境。
簡(jiǎn)單來(lái)說(shuō):node.js就是前端的后端,可以當(dāng)Web 服務(wù)器,但更傾向處理業(yè)務(wù)邏輯。
具體的說(shuō):
Node.js 就是運(yùn)行在服務(wù)端的 JavaScript。 Node.js 是一個(gè)基于Chrome JavaScript 運(yùn)行時(shí)建立的一個(gè)平臺(tái)。 Node.js 是一個(gè)事件驅(qū)動(dòng)I/O服務(wù)端JavaScript環(huán)境,基于Google的V8引擎,V8引擎執(zhí)行Javascript的速度非常快,性能非常好。
(2)特性
Node.js可以解析JS代碼(沒有瀏覽器安全級(jí)別的限制,可以跨域請(qǐng)求)提供很多系統(tǒng)界別的API。
文件的讀寫(fs) 進(jìn)程的管理(process) 網(wǎng)絡(luò)通信(http/https) … 另:
① 不能跨域?yàn)g覽器報(bào)的錯(cuò):
node.js的回調(diào)函數(shù)有一個(gè)特點(diǎn):錯(cuò)誤優(yōu)先回調(diào),也就是第一個(gè)參數(shù)是err,第二個(gè)參數(shù)才是數(shù)據(jù)data
② 使用node命令可以直接執(zhí)行js文件,原來(lái)如果要執(zhí)行js文件必須要依賴瀏覽器,即將js文件引入html文件,再去瀏覽器上訪問(wèn)html頁(yè)面js才被執(zhí)行。而現(xiàn)在有了node給js提供運(yùn)行環(huán)境只需要在命令終端輸入:node js文件命令即可執(zhí)行該js文件。
2.Node相關(guān)工具
(1)NVM(node version management )
nvm:是一個(gè)nodejs的版本管理工具。通過(guò)它可以安裝和切換不同版本的nodejs。下面列出下載、安裝及使用方法。
Mac安裝 https://github.com/nvm-sh/nvm/blob/master/README.md
Windows安裝 nvm-windows nodist
安裝/管理nodejs 查看本地安裝的所有版本,有可選參數(shù)available,顯示所有可下載的版本:
nvm list [available]
安裝,命令中的版本號(hào)可自定義,具體參考命令1查詢出來(lái)的列表:
nvm install 11.13.0
使用特定版本:(只針對(duì)于當(dāng)前終端生效)
nvm use 11.13.0
修改默認(rèn)版本:(對(duì)于所有終端生效 )
nvm alias default 11.13.0
卸載:
nvm uninstall 11.13.0
命令提示 nvm arch :顯示node是運(yùn)行在32位還是64位。
nvm install [arch] :安裝node, version是特定版本也可以是最新穩(wěn)定版本latest。可選參數(shù)arch指定安裝32位還是64位版本,默認(rèn)是系統(tǒng)位數(shù)。可以添加–insecure繞過(guò)遠(yuǎn)程服務(wù)器的SSL。
nvm list [available] :顯示已安裝的列表??蛇x參數(shù)available,顯示可安裝的所有版本。list可簡(jiǎn)化為ls。
nvm on :開啟node.js版本管理。
nvm off :關(guān)閉node.js版本管理。
nvm proxy [url] :設(shè)置下載代理。不加可選參數(shù)url,顯示當(dāng)前代理。將url設(shè)置為none則移除代理。
nvm node_mirror [url] :設(shè)置node鏡像。默認(rèn)是https://nodejs.org/dist/。如果不寫url,則使用默認(rèn)url。設(shè)置后可至安裝目錄settings.txt文件查看,也可直接在該文件操作。
nvm npm_mirror [url] :設(shè)置npm鏡像。https://github.com/npm/cli/archive/。如果不寫url,則使用默認(rèn)url。設(shè)置后可至安裝目錄settings.txt文件查看,也可直接在該文件操作。
nvm uninstall :卸載指定版本node。
nvm use [version] [arch] :使用制定版本node??芍付?2/64位。
nvm root [path] :設(shè)置存儲(chǔ)不同版本node的目錄。如果未設(shè)置,默認(rèn)使用當(dāng)前目錄。
nvm version :顯示nvm版本。version可簡(jiǎn)化為v。
(2)NPM(node package management )
1–全局安裝/卸載依賴包
npm install/uninstall packageName -g
全局依賴包的目錄 Mac:/Users/用戶名/.nvm/versions/node/nvm各個(gè)版本/bin/
Windows: C:\users\用戶名\AppData\Romaing\npm\node_modules
2–本地(局部)安裝依賴包
npm install packageName --save[-dev] //-dev是安裝開發(fā)時(shí)依賴才會(huì)加上
簡(jiǎn)寫:
npm install packageName -S //生產(chǎn)時(shí)依賴
npm install packageName -D //開發(fā)時(shí)依賴
非常常用的第三方工具包lodash、underscore 項(xiàng)目中的package.json是對(duì)項(xiàng)目或者模塊包的描述,里面包含許多元信息。 npm init [-y] //生成package.json文件,-y的意思就是一切都yes。
3–查看項(xiàng)目中已安裝的包
npm list 查看項(xiàng)目中所有包名稱和版本號(hào),以及包與包之間的層級(jí)關(guān)系 npm list | grep pkgName 查看指定包的版本號(hào),以及和該包相關(guān)層級(jí)關(guān)系 npm view pkgName versions 查詢指定package包的所有版本 npm info pkgName 查詢指定依賴包的詳細(xì)信息 pkgName -v 查詢指定包的版本號(hào)
4–更新項(xiàng)目中已安裝的包
npm outdated 查看項(xiàng)目中哪些包是已經(jīng)過(guò)期需要升級(jí)的 npm update 更新項(xiàng)目中版本對(duì)應(yīng)的依賴包,多用于手動(dòng)修改了package.json里中依賴包的版本號(hào)。(4和5搭配使用)
5–關(guān)于版本號(hào)
例:^13.4.6/~13.4.6 /13.4.6 /* ---- major(主版本號(hào)):13,minor(次版本號(hào)):4,patch(補(bǔ)丁號(hào)):6 注:patch,如果是偶數(shù)一般是指穩(wěn)定的,如果是奇數(shù)表示不穩(wěn)定的 ---- ^ 符號(hào)表示對(duì)版本進(jìn)行適配,只鎖定主板號(hào),也就是主板號(hào)不變,其他進(jìn)行適配 ---- ~ 表示鎖定主版本號(hào)和次版本號(hào),patch適配 ---- 版本號(hào)前面為空表示鎖定主版本號(hào)、次版本號(hào)、補(bǔ)丁號(hào) ---- * 符號(hào)表示包的最新版本
6–清除緩存
npm cache clean --force
7–npm腳本
什么是npm腳本? npm允許在packsge.json文件中,使用scripts字段定義腳本命令。通過(guò)npm run key執(zhí)行
執(zhí)行順序 如果npm腳本里需要執(zhí)行多個(gè)任務(wù),那么需要明確它們的執(zhí)行順序。
① & 符號(hào)表示并行執(zhí)行,執(zhí)行順序不確定,按照哪個(gè)文件先執(zhí)行完的來(lái)排序 ② && 符號(hào)表示串行執(zhí)行,按照從做左到右的順序執(zhí)行文件(先執(zhí)行script1.js在執(zhí)行script2.js文件)
簡(jiǎn)寫腳本:start、test scripts腳本中有幾個(gè)特殊的簡(jiǎn)寫腳本:start、test。在命令終端中執(zhí)行這兩個(gè)腳本時(shí)不需要寫run,直接輸入npm start/test即可運(yùn)行npm腳本.
訪問(wèn)package.json中的配置變量,前綴npm_package_
①在package.json 文件內(nèi)訪問(wèn) Windows使用%%,mac使用$,前綴npm_package_訪問(wèn)的變量名[_key]。
windows: mac: 運(yùn)行結(jié)果:
②外部文件訪問(wèn)package.json中的配置變量
script.js: 運(yùn)行結(jié)果:
(3)NRM(npm registry manager )
1–手動(dòng)切換源
查看當(dāng)前源:
npm config get registry
切換淘寶源:
npm config set registry https://registry.npm.taobao.org
2–NRM管理源
NRM是npm的鏡像管理源工具,有時(shí)候國(guó)外資源太慢,使用這個(gè)就可以快速地在npm源間切換。
安裝NRM 需全局安裝
npm i -g nrm
使用NRM 終端輸入:
nrm ls //查看可選的源。其中,帶*的是當(dāng)前使用的源。
切換NRM 切換taobao源:
nrm use taobao
切換npm源:
nrm use npm
…
測(cè)試速度
nrm test //測(cè)試相應(yīng)源的響應(yīng)時(shí)間
3–設(shè)置代理
npm config set proxy 代理地址:端口
npm config set https-proxy 代理地址:端口
(4)NPX(npm package extention)
npm從5.2版開始,增加了npx命令。Node自帶npm模塊,所以可以直接調(diào)用npx命令。如果不行則手動(dòng)安裝:
npm install -g npx
NPX的作用: 為了調(diào)用項(xiàng)目?jī)?nèi)部安裝的模塊,例: 如果項(xiàng)內(nèi)部安裝了webpack,目前為止通過(guò)命令的方式獲取版本號(hào)有兩種
①終端直接輸入:
node-modules/.bin/webpack --version
②編寫package.json中的scripts腳本 再執(zhí)行腳本:
npm run wbpkVer
以上兩種用起來(lái)都比較麻煩,npx就是為了解決這個(gè)問(wèn)題,所有有了第三種方式:
③終端直接輸入:
npx webpack --version
原理:項(xiàng)目運(yùn)行的時(shí)候,會(huì)到node-modules/.bin 路徑下和環(huán)境變量$PATH里面檢查命令是否存在
使用時(shí)的兩種情況 ①如果項(xiàng)目本地有訪問(wèn)的依賴包,則直接訪問(wèn),例: 項(xiàng)目中有webpack包則執(zhí)行npx webpack -v,結(jié)果會(huì)顯示webpack的版本號(hào)
②如果項(xiàng)目本地沒有訪問(wèn)的依賴包,則執(zhí)行npx命令時(shí),會(huì)自動(dòng)安裝該依賴包,并且安裝的包是一次性使用的,存在臨時(shí)文件夾中,用完一次就會(huì)刪掉這個(gè)包,并不會(huì)存在package.json和node-modules文件中。例: 項(xiàng)目中沒有安裝gulp包,執(zhí)行npx命令就會(huì)去自動(dòng)安裝gulp包。
兩參數(shù)的使用 ①–no-install:讓npx強(qiáng)制使用項(xiàng)目本地安裝模塊(依賴包),不下載遠(yuǎn)程模塊(依賴包) 。如果本地不存在該依賴包,就會(huì)報(bào)錯(cuò)。例:
npx --no-install webpack
②–ignore-existing:與之相反,如果本地有同名的模塊,強(qiáng)制安裝使用遠(yuǎn)程的模塊,這樣可以是該模塊使用的是最新版本。
npx --ignore-existing weboack
3.Node的三類模塊
node.js中有三類模塊:內(nèi)置模塊,第三方模塊,自定義模塊
(1)內(nèi)置模塊
訪問(wèn)https://nodejs.org/docs/latest-v主版本號(hào).x/api/,比如:path、http、https、process等等都是Node的內(nèi)置模塊中的,直接引入調(diào)用即可。
(2)第三方模塊
訪問(wèn)https://www.npmjs.com/按需安裝第三方包 npm install pkgName將安裝好的第三方包引入即可使用
(3)自定義模塊 – 使用CommonJS規(guī)范
1–發(fā)布包
生成pakeage.json文件:
npm init -y
name---------包名,包名是全網(wǎng)唯一的 version-------包版本號(hào) main-----------該包的主入口,也是暴露給外面使用的接口
創(chuàng)建index.js并寫入要實(shí)現(xiàn)的功能方法,并導(dǎo)出(使用CommonJS規(guī)范)
注冊(cè)npm倉(cāng)庫(kù)賬號(hào) 網(wǎng)站:https://www.npmjs.com/,登錄已有賬號(hào)郵箱
打開命令終端輸入:
npm adduser
然后輸入npm的賬號(hào)密碼郵箱
如果npm使用了淘寶鏡像https://registry.npm.taobao.org/,則需要npm切換源
npm config get registry //查看當(dāng)前源
npm config set https://registry.npmjs.org //切換源
nrm use npm //也可切換源,二選一
再次輸入登錄
npm adduser
發(fā)布(上傳)包:
npm publish
如果是有命名空間的包用:
npm publish --access public(發(fā)布為公用包)
或者 也可通過(guò) package.json 中的 publicConfig 字段配置聲明。
{
"name": "test-npm",
"version": "0.1.0",
"main": "lib/index.js",
"module": "es/index.js",
"publishConfig": {
"access": "public"
}
...
}
補(bǔ):發(fā)布帶有命名空間的包 npm 會(huì)默認(rèn)為是要發(fā)布私有包,發(fā)布私有包需要另外付費(fèi)。
在所需要引入該包的項(xiàng)目安裝
npm i custom-test
引入模塊進(jìn)可使用自定義的包
測(cè)試:
node server.js
注:如果該自定義的模塊中有修改,則需修改package.json中的version的版本號(hào)(比如1.0.1),再重新npm publish即可。
如何刪除npm包
npm unpublish <包名> -force
注: 1)npm unpublish 命令只能刪除72小時(shí)內(nèi)發(fā)布的包 2)npm unpublish 刪除的包,在24小時(shí)內(nèi)不能重新發(fā)布 3)發(fā)布包是慎重,盡量不要在npm上發(fā)布無(wú)意義的包
如何升級(jí)版本 ① 版本號(hào)格式 格式:MAJOR.MINOR.PATCH ,值非負(fù)整數(shù),且禁止在數(shù)字前面補(bǔ) 0 MAJOR:主版本號(hào),MINOR:次版本號(hào),PATCH::修訂號(hào)
② 版本號(hào)遞增邏輯 1)當(dāng)有破壞性不兼容的 API 變更時(shí),升級(jí)主版本號(hào) 2)當(dāng)新增一些功能特性時(shí),升級(jí)次版本號(hào) 3)當(dāng)做一些 bug 修復(fù)時(shí),升級(jí)修訂號(hào) 當(dāng)某個(gè)版本還不穩(wěn)定的時(shí)候,還可能要先發(fā)布一個(gè)先行版本,具體可看 semver 規(guī)范。 可以使用 npm version 命令來(lái)修改版本號(hào)。
npm version [
例如:
# 0.0.0 => 0.0.1
npm version patch
# 0.0.0 => 0.1.0
npm version minor
# 0.0.0 => 1.0.0
npm version major
# 0.0.0 => 0.0.1-0
# === 先行版本 ===
npm version prepatch
# 0.0.0 => 0.0.1-alpha.0
npm version prepatch --preid=alpha
# 0.0.1-alpha.0 => 0.0.1-alpha.1
npm version prerelease
命令行選項(xiàng)
–preid 指定先行版本的標(biāo)識(shí)符,例如 1.2.3-rc.4 中的 rc -m 或 --message 可以指定 commit 信息,例如 npm version patch -m "Upgrade to %s for reasons” ; -no-git-tag-version 取消創(chuàng)建 git tag 和 commit 信息
2–借助 cli 工具 release-it 來(lái)自動(dòng)發(fā)布包
https://blog.csdn.net/BASK2312/article/details/128145705 其他說(shuō)明 執(zhí)行 npm version 命令時(shí),會(huì)修改 package.json 、package-lock.json 的 version 字段為對(duì)應(yīng)版本;若當(dāng)前使用 git 來(lái)管理文件,還會(huì)創(chuàng)建一條 commit 信息和創(chuàng)建一個(gè) tag,可通過(guò)指定 -no-git-tag-version 取消生成 commit 和 tag。
執(zhí)行 npm version 前,git 工作區(qū)和暫存區(qū)確保沒有文件,否則會(huì)執(zhí)行失敗。
4.cross-env使用
(1)cross-env是什么
運(yùn)行跨平臺(tái)設(shè)置和使用環(huán)境變量的腳本。
(2)出現(xiàn)原因
當(dāng)使用NODE_ENV=production來(lái)設(shè)置環(huán)境變量時(shí),大多數(shù)Windows命令提示將會(huì)阻塞(報(bào)錯(cuò)),(異常是windows上的Bash,它使用本機(jī)Bash)換言之,Windows不支持NODE_ENV=production 的設(shè)置方式。
(3)解決
用cross-env可以實(shí)現(xiàn)使用單個(gè)命令,而不必?fù)?dān)心平臺(tái)正確設(shè)置或使用環(huán)境變量,這個(gè)包能夠提供一個(gè)設(shè)置環(huán)境變量的scripts,通過(guò)Unix的方式設(shè)置環(huán)境變量,然后再Windows上也能兼容運(yùn)行。
(4)安裝
npm i --save-dev cross-env
(5)使用
例子:目的是為了在執(zhí)行npm腳本時(shí)能獲取腳本中設(shè)置的參數(shù)的值
mac操作系統(tǒng): package.json ①scripts腳本中有一個(gè)NODE_ENV參數(shù)變量,不同的腳本NODE_ENV設(shè)置值不同 ②分別在webpack.prod.config.js和webpack.dev.config.js 中獲取NODE_ENV參數(shù)的值
③終端分別執(zhí)行腳本
執(zhí)行npm run build -----------------------打印結(jié)果:production
執(zhí)行npm run dev--------------------------打印結(jié)果:development
windows操作系統(tǒng): 在windows上操作,運(yùn)行npm腳本會(huì)報(bào)錯(cuò),這里就需用到cross-env,使在Windows上也可以兼容運(yùn)行 為確保在任何操作系統(tǒng)上都能兼容運(yùn)行,取到參數(shù)的值,都加上cross-env來(lái)獲取 npm腳本中參數(shù)的值
柚子快報(bào)邀請(qǐng)碼778899分享:node.js學(xué)習(xí)記錄
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。