Node.js
教學(xué)視頻 BV1MN411y7pw , P83-97的筆記
一、定義
Node.js是一個(gè)跨平臺(tái)JavaScript運(yùn)行環(huán)境,使開(kāi)發(fā)者可以搭建服務(wù)器端的JavaScript應(yīng)用程序。
作用:使用 Node.js 編寫(xiě)服務(wù)器端程序
? 編寫(xiě)數(shù)據(jù)接口,提供網(wǎng)頁(yè)資源瀏覽功能等等
? 前端工程化:為后續(xù)學(xué)習(xí) Vue 和 React 等框架做鋪墊
1.前端工程化
前端工程化:開(kāi)發(fā)項(xiàng)目直到上線,過(guò)程中集成的所有工具和技術(shù)
Node.js 是前端工程化的基礎(chǔ)(因?yàn)?Node.js 可以主動(dòng)讀取前端代碼內(nèi)容)
2.Node.js 為何能執(zhí)行 JS?
首先:瀏覽器能執(zhí)行 JS 代碼,依靠的是內(nèi)核中的 V8 引擎(C++ 程序)
其次:Node.js 是基于 Chrome V8 引擎進(jìn)行封裝(運(yùn)行環(huán)境)
區(qū)別:都支持 ECMAScript 標(biāo)準(zhǔn)語(yǔ)法,Node.js 有獨(dú)立的 API
注意:Node.js 環(huán)境沒(méi)有 DOM 和 BOM 等
3.安裝nodejs、刪除之前的nodejs
因?yàn)橹坝邪惭b過(guò)一次nodejs,但是忘記放在哪里了,
a later version of node.js is already installed.
https://www.cnblogs.com/fighxp/p/7410235.html
https://blog.51cto.com/teayear/9559527
備注一下,我這次裝在了D:\nodejs
4.使用 Node.js
需求:新建 JS 文件,并編寫(xiě)代碼后,在 node 環(huán)境下執(zhí)行
命令:在 VSCode 集成終端中,輸入node xxx.js
,回車即可執(zhí)行
總結(jié):
1. Node.js 是什么?
? 基于 Chrome 的 V8 引擎封裝,獨(dú)立執(zhí)行 JavaScript 代碼的環(huán)境
2. Node.js 與瀏覽器環(huán)境的 JS 最大區(qū)別?
? Node.js 環(huán)境中沒(méi)有 BOM 和 DOM
3. Node.js 有什么用?
? 編寫(xiě)后端程序:提供數(shù)據(jù)和網(wǎng)頁(yè)資源等
? 前端工程化:集成各種開(kāi)發(fā)中使用的工具和技術(shù)
4. Node.js 如何執(zhí)行代碼?
? 在 VSCode 終端中輸入:node xxx.js 回車即可執(zhí)行(注意路徑)
二、fs模塊 - 讀寫(xiě)文件
模塊:類似插件,封裝了方法/屬性
fs 模塊:封裝了與本機(jī)文件系統(tǒng)進(jìn)行交互的,方法/屬性
語(yǔ)法:
- 加載 fs 模塊對(duì)象
- 寫(xiě)入文件內(nèi)容
- 讀取文件內(nèi)容
const f = require('fs')
// 寫(xiě)
f.writeFile('./02test.txt','hello,node.js',err => {
if (err) {
console.log(err);
} else {
console.log('寫(xiě)入成功');
}
})
// 讀
f.readFile('./02test.txt',(err, data) => {
if(err) console.log(err);
else {
console.log(data); // 68 65 6c 6c 6f 2c 6e 6f 64 65 2e 6a 73>
// data是文件內(nèi)容的 Buffer數(shù)據(jù)流 (是字符串在 計(jì)算機(jī)中保存的二進(jìn)制數(shù)據(jù) 轉(zhuǎn)換成的十六進(jìn)制數(shù)據(jù))
console.log(data.toString()); // hello,node.js
}
})
三、path 模塊
問(wèn)題:Node.js 代碼中,相對(duì)路徑是根據(jù)終端所在路徑來(lái)查找的,可能無(wú)法找到你想要的文件。
建議:在 Node.js 代碼中,使用絕對(duì)路徑
補(bǔ)充知識(shí)點(diǎn):__dirname 內(nèi)置變量(獲取當(dāng)前模塊目錄的絕對(duì)路徑)
- 例子:
? windows: D:\備課代碼\3-B站課程\03_Node.js與Webpack\03-code\03
? mac: /Users/xxx/Desktop/備課代碼/3-B站課程/03_Node.js與Webpack/03-code/03
mac 和 windows 的區(qū)別在于 分隔符 一個(gè)是\ 一個(gè)是/
注意:path.join() 會(huì)使用特定于平臺(tái)的分隔符,作為定界符,將所有給定的路徑片段連接在一起。
path.join('03', 'dist/js', 'index.js')
// windows: '03\dist\js\index.js'
// mac: '03/dist/js/index.js'
語(yǔ)法
path用于解決,代碼中的相對(duì)路徑和調(diào)試終端的所在文件夾 不同的問(wèn)題。
調(diào)用path.join()配合__dirname組成的目標(biāo)文件的絕對(duì)路徑。
- 案例:
修改后:
const path = require('path')
console.log(__dirname);
const f = require('fs')
f.writeFile(path.join(__dirname,'./03test.txt'),'444444',err => {
if (err) {
console.log(err);
} else {
console.log('寫(xiě)入成功');
}
})
案例 - 壓縮前端html
需求:把 回車符(\r)和換行符(\n)去掉后,寫(xiě)入到新 html 文件中
步驟:
- 讀取源 html 文件內(nèi)容
- 正則替換字符串
- 寫(xiě)入到新的 html 文件中
V:\Web\mycode\nodejs\04 compress_html\public\index.html
/**
* 目標(biāo)1:壓縮 html 代碼
* 需求:把回車符 \r,換行符 \n 去掉,寫(xiě)入到新 html 文件中
* 1.1 讀取源 html 文件內(nèi)容
* 1.2 正則替換字符串
* 1.3 寫(xiě)入到新的 html 文件中
*/
// 1.1 讀取源 html 文件內(nèi)容
const fs = require('fs')
const path = require('path')
fs.readFile(path.join(__dirname, 'public/index.html'), (err, data) => {
if (err) console.log(err)
else {
const htmlStr = data.toString()
// 1.2 正則替換字符串
const resultStr = htmlStr.replace(/[\r\n]/g, '')
console.log(resultStr)
// 1.3 寫(xiě)入到新的 html 文件中
fs.writeFile(path.join(__dirname, 'dist/index.html'), resultStr, err => {
if (err) console.log(err)
else console.log('寫(xiě)入成功')
})
}
})
四、HTTP相關(guān)
URL中的端口號(hào)
URL:統(tǒng)一資源定位符,簡(jiǎn)稱網(wǎng)址,用于訪問(wèn)服務(wù)器里的資源
端口號(hào):標(biāo)記服務(wù)器里不同功能的服務(wù)程序
端口號(hào)范圍:0-65535 之間的任意整數(shù)
注意:http 協(xié)議,默認(rèn)訪問(wèn) 80 端口。所以可以省略。
常見(jiàn)的服務(wù)程序
服務(wù)器中常見(jiàn)的服務(wù)程序-Web 服務(wù)程序:用于提供網(wǎng)上信息瀏覽功能
注意:0-1023 和一些特定端口號(hào)被占用,我們自己編寫(xiě)服務(wù)程序請(qǐng)避開(kāi)使用
1. 端口號(hào)的作用?
? 標(biāo)記區(qū)分服務(wù)器里不同的服務(wù)程序
2. 什么是 Web 服務(wù)程序?
? 提供網(wǎng)上信息瀏覽的程序代碼
http 模塊-創(chuàng)建 Web 服務(wù)
使用nodejs提供的http模塊,創(chuàng)建 Web 服務(wù)
需求:創(chuàng)建 Web 服務(wù)并響應(yīng)內(nèi)容給瀏覽器
步驟:
-
加載 http 模塊,創(chuàng)建 Web 服務(wù)對(duì)象
-
監(jiān)聽(tīng) request 請(qǐng)求事件,設(shè)置響應(yīng)頭和響應(yīng)體
server.on(‘request’, (req, res) =>{ // 略})
- req,request 意為請(qǐng)求. 是對(duì)請(qǐng)求報(bào)文的封裝對(duì)象, 通過(guò) request 對(duì)象可以獲得請(qǐng)求報(bào)文的數(shù)據(jù)
- res,response 意為響應(yīng). 是對(duì)響應(yīng)報(bào)文的封裝對(duì)象, 通過(guò) response 對(duì)象可以設(shè)置響應(yīng)報(bào)文
-
配置端口號(hào)并啟動(dòng) Web 服務(wù)(一個(gè)web服務(wù)程序?qū)?yīng)一個(gè)端口號(hào))
-
瀏覽器請(qǐng)求 http://localhost:3000 測(cè)試
(localhost:固定代表本機(jī)的域名)
// 1. 加載 http 模塊,創(chuàng)建 Web 服務(wù)對(duì)象
const h = require('http')
const server = h.createServer()
// 2. 監(jiān)聽(tīng) request 請(qǐng)求事件,設(shè)置響應(yīng)頭和響應(yīng)體
server.on('request', (req, res) => {
// 設(shè)置響應(yīng)頭: 內(nèi)容類型 普通文本以及中文編碼格式
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
// 設(shè)置響應(yīng)體內(nèi)容,結(jié)束本次請(qǐng)求與響應(yīng)
res.end('歡迎使用node.js和http模塊創(chuàng)建的web服務(wù)')
})
// 3. 配置端口號(hào)并啟動(dòng) Web 服務(wù)(一個(gè)web服務(wù)程序?qū)?yīng)一個(gè)端口號(hào))
server.listen(3000, () => {
console.log('web服務(wù)啟動(dòng)成功');
})
// 4. 瀏覽器請(qǐng)求 http://localhost:3000 測(cè)試
在瀏覽器網(wǎng)址欄輸入 http://localhost:3000后:
案例:瀏覽時(shí)鐘
需求:基于 Web 服務(wù),開(kāi)發(fā)提供網(wǎng)頁(yè)資源的功能
const fs = require('fs')
const path = require('path')
// 基于http模塊
const http = require('http');
// 創(chuàng)建服務(wù)器
const server = http.createServer()
// 服務(wù)器監(jiān)聽(tīng)有沒(méi)有請(qǐng)求
// req,request 意為請(qǐng)求. 是對(duì)請(qǐng)求報(bào)文的封裝對(duì)象, 通過(guò) request 對(duì)象可以獲得請(qǐng)求報(bào)文的數(shù)據(jù)
// res,response 意為響應(yīng). 是對(duì)響應(yīng)報(bào)文的封裝對(duì)象, 通過(guò) response 對(duì)象可以設(shè)置響應(yīng)報(bào)文
server.on('request', (req, res) => {
if(req.url === '/index.html') {
// 返回該網(wǎng)址
fs.readFile(path.join(__dirname, 'dist/index.html'), (err,data) =>{
if(err) console.log(err);
else {
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end(data.toString())
}
})
} else {
res.setHeader('Content-Type', 'text/html;charset=utf-8')
res.end('not found')
}
})
// 配置端口號(hào)并啟動(dòng) Web 服務(wù)
server.listen(8080, () => {
console.log('web 服務(wù)器啟動(dòng)');
})
五、模塊化
在Node.js 中,每個(gè)文件都被視為一個(gè)單獨(dú)的模塊。
概念:項(xiàng)目是由很多個(gè)模塊文件組成的。 一個(gè)文件就是一個(gè)模塊。
好處:提高代碼復(fù)用性,按需加載,獨(dú)立作用域
使用:需要標(biāo)準(zhǔn)語(yǔ)法 導(dǎo)出和導(dǎo)入進(jìn)行使用。標(biāo)準(zhǔn)語(yǔ)法有 CommonJS 、ECMAScript
1.CommonJS 模塊標(biāo)準(zhǔn)
CommonJS 模塊是為Nodejs打包 JavaScript 代碼的原始方式。Node.js 還支持瀏覽器和其他JavaScript運(yùn)行使用的ECMAScript模塊標(biāo)準(zhǔn)
使用:
? 1、導(dǎo)出:module.exports = {}
2、導(dǎo)入:require(‘模塊名或路徑’)
模塊名或路徑:
? ? 內(nèi)置模塊:直接寫(xiě)名字(例如:fs,path,http)
? ? 自定義模塊:寫(xiě)模塊文件路徑(例如:./utils.js)
- 示例
需求:定義 utils.js 模塊,封裝基地址和求數(shù)組總和的函數(shù)
V:\Web\mycode\nodejs\07 modularity_CommonJS\index.js
utils.js:
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
// const getArraySum2 = function (arr) {
// return arr.reduce((sum,item) => sum + item ,0)
// }
// 導(dǎo)出
module.exports = {
url: baseURL,
arraySum: getArraySum
}
index.js:
const obj = require('./utils.js')
console.log(obj.url);
console.log(obj.arraySum([1,2,4]));
總結(jié):
1. Node.js 中什么是模塊化?
? 每個(gè)文件都是獨(dú)立的模塊
2. 模塊之間如何聯(lián)系呢?
? 使用特定語(yǔ)法,導(dǎo)出和導(dǎo)入使用
3. CommonJS 標(biāo)準(zhǔn)規(guī)定如何導(dǎo)出和導(dǎo)入模塊呢?
? 導(dǎo)出:module.exports = {}
? 導(dǎo)入:require('模塊名或路徑')
4. 模塊名/路徑如何選擇?
? 內(nèi)置模塊,直接寫(xiě)名字。例如:fs,path,http等
? 自定義模塊,寫(xiě)模塊文件路徑。例如:./utils.js
2.ECMAScript 模塊標(biāo)準(zhǔn)
2.1 默認(rèn)導(dǎo)出和導(dǎo)入
默認(rèn)標(biāo)準(zhǔn)使用:
? 1、導(dǎo)出:export default {}
? 2、導(dǎo)入:import 變量名 from ‘模塊名或路徑’
注意:Node.js 默認(rèn)支持 CommonJS 標(biāo)準(zhǔn)語(yǔ)法。如需使用 ECMAScript 標(biāo)準(zhǔn)語(yǔ)法,在運(yùn)行模塊所在文件夾新建 package.json 文件,并設(shè)置 { “type” : “module” }
-
示例
V:\Web\mycode\nodejs\08 modularity_ECMAScript_default export\index.js
index.js是運(yùn)行模塊,要在index.js所在的文件夾中 創(chuàng)建一個(gè) package.json
utils.js
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
// 導(dǎo)出
export default {
url: baseURL,
arraySum: getArraySum
}
index.js
import obj from './utils'
console.log(obj);
package.json
{
"type" : "module"
}
總結(jié)
1. ECMAScript 標(biāo)準(zhǔn)規(guī)定如何默認(rèn)導(dǎo)出和導(dǎo)入模塊呢?
? 導(dǎo)出:export default {}
? 導(dǎo)入:import 變量名 from '模塊名或路徑'
2. 如何讓 Node.js 切換模塊標(biāo)準(zhǔn)為 ECMAScript?
? 運(yùn)行模塊所在文件夾,新建 package.json 并設(shè)置
? { "type" : "module" }
2.2 命名導(dǎo)出和導(dǎo)入
命名標(biāo)準(zhǔn)使用:
? 1、導(dǎo)出:export 修飾定義語(yǔ)句
? 2、導(dǎo)入:import { 同名變量 } from '模塊名或路徑‘
如何選擇是默認(rèn)導(dǎo)入導(dǎo)出還是命名導(dǎo)入導(dǎo)出?
? 按需加載,使用命名導(dǎo)出和導(dǎo)入
? 全部加載,使用默認(rèn)導(dǎo)出和導(dǎo)入
? 二者可以同時(shí)用
- 示例
utils.js
// 導(dǎo)出
export const baseURL = 'http://hmajax.itheima.net'
export const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
index.js
// 默認(rèn)導(dǎo)入導(dǎo)出
import {baseURL, getArraySum} from './utils.js'
console.log(baseURL);
console.log(getArraySum([1,2,5]));
package.json
{ "type" : "module" }
本節(jié)總結(jié)
1. Node.js 支持哪 2 種模塊化標(biāo)準(zhǔn)?
? CommonJS 標(biāo)準(zhǔn)語(yǔ)法(默認(rèn))
? ECMAScript 標(biāo)準(zhǔn)語(yǔ)法
2. ECMAScript 標(biāo)準(zhǔn),命名導(dǎo)出和導(dǎo)入的語(yǔ)法?
? 導(dǎo)出:export 修飾定義的語(yǔ)句
? 導(dǎo)入:import { 同名變量 } from '模塊名或路徑‘
3. ECMAScript 標(biāo)準(zhǔn),默認(rèn)導(dǎo)出和導(dǎo)入的語(yǔ)法?
? 導(dǎo)出:export default {}
? 導(dǎo)入:import 變量名 from '模塊名或路徑'
六、包
1.包
包:將模塊,代碼,其他資料聚合成一個(gè)文件夾
包分類:
? 項(xiàng)目包:主要用于編寫(xiě)項(xiàng)目和業(yè)務(wù)邏輯
? 軟件包:封裝工具和方法進(jìn)行使用
要求:根目錄中,必須有 package.json 文件(記錄包的清單信息)
- 示例:package.json
注意:導(dǎo)入軟件包時(shí),默認(rèn)引入該包中的 index.js 模塊文件 。如果沒(méi)有找到,就引入package.json文件中 main 屬性指定的模塊文件。
- 案例
需求:封裝數(shù)組求和函數(shù)的模塊,判斷用戶名和密碼長(zhǎng)度函數(shù)的模塊,形成成一個(gè)軟件包
V:\Web\mycode\nodejs\10 package\server.js
總結(jié)
1. 什么是包?
? 將模塊,代碼,其他資料聚合成的文件夾
2. 包分為哪 2 類呢?
? 項(xiàng)目包:編寫(xiě)項(xiàng)目代碼的文件夾
? 軟件包:封裝工具和方法供開(kāi)發(fā)者使用
3. package.json 文件的作用?
? 記錄軟件包的名字,作者,入口文件等信息
4. 導(dǎo)入一個(gè)包文件夾的時(shí)候,導(dǎo)入的是哪個(gè)文件?
? 默認(rèn) index.js 文件,package.json文件中 main 屬性指定的文件
文件 —— 模塊
文件夾 —— 包
2.npm
npm - 軟件包管理器
npm是Node.js標(biāo)準(zhǔn)的軟件包管理器。
它起初是作為下載和管理Node.js包依賴的方式(下載和管理Node.js中需要的軟件包),但其現(xiàn)在也已成為前端JavaScript中使用的工具。
使用:
-
初始化清單文件 :npm init -y(得到 package.json 文件,用于記錄當(dāng)前項(xiàng)目下載過(guò)哪些軟件包,有則略過(guò)此命令)
-
下載軟件包 :npm i 軟件包名稱
-
使用軟件包
- 示例: 需求:使用 dayjs 軟件包,來(lái)格式化日期時(shí)間
① 創(chuàng)建一個(gè)項(xiàng)目文件夾
② 初始化清單文件 :npm init -y ,得到 package.json 文件,用于記錄當(dāng)前項(xiàng)目下載過(guò)哪些軟件包
③ npm i dayjs 命令, 從npm資源庫(kù)中下載該軟件包到當(dāng)前項(xiàng)目文件夾中的node_modules文件夾中。(1) 同時(shí)npm會(huì)記錄dayjs包的名字、版本號(hào) 到 package.json 文件中(具體是dependencies選項(xiàng)里)(2)還會(huì)生成一個(gè)package-lock.json文件,主要作用是固化下載的軟件包對(duì)應(yīng)的版本號(hào)。(固化原因:開(kāi)發(fā)項(xiàng)目的過(guò)程中如果修改這個(gè)軟件包,使用過(guò)的方法會(huì)有問(wèn)題,為了保證當(dāng)前項(xiàng)目可以正常運(yùn)行)
④自己的項(xiàng)目文件中導(dǎo)入dayjs包 并引用方法
流程圖:
- 案例
V:\Web\mycode\nodejs\11 npm_use\server.js
總結(jié)
1. npm 軟件包管理器作用?
? 下載軟件包以及管理版本
2. 初始化項(xiàng)目清單文件 package.json 命令?
? npm init -y
3. 下載軟件包的命令?
? npm i 軟件包名字
4. 下載的包會(huì)存放在哪里?
? 當(dāng)前項(xiàng)目下的 node_modules 中,并記錄在 package.json 中
npm - 安裝所有依賴
從網(wǎng)上找到的代碼 少了 node_modules文件夾
項(xiàng)目中不包含 node_modules,不能正常運(yùn)行。因?yàn)槿鄙僖蕾嚨谋镜剀浖?/p>
為什么別人不把node_modules傳遞給我們呢?因?yàn)?,自己?npm 下載依賴比磁盤傳遞拷貝要快得多。
解決:項(xiàng)目終端輸入命令:【npm i】 (注意下載路徑要對(duì))
下載 package.json 中記錄的所有軟件包
BV1MN411y7 , P95
總結(jié)
1. 當(dāng)項(xiàng)目中只有 package.json 沒(méi)有 node_modules 怎么辦?
? 當(dāng)前項(xiàng)目下,執(zhí)行 npm i 安裝所有依賴軟件包
2. 為什么 node_modules 不進(jìn)行傳遞?
? 因?yàn)橛?npm 下載比磁盤傳遞要快
npm - 全局軟件包 nodemon
BV1MN411y7pw, P96
軟件包區(qū)別:
? 本地軟件包:當(dāng)前項(xiàng)目內(nèi)使用,封裝屬性和方法,存在于 node_modules
? 全局軟件包:本機(jī)所有項(xiàng)目使用,封裝命令和工具,存在于系統(tǒng)設(shè)置的位置
nodemon 作用:替代 node 命令,檢測(cè)我們編寫(xiě)的代碼是否發(fā)生更改,然后自動(dòng)重啟程序
使用nodemon:
- 安裝:npm i nodemon -g(-g 代表安裝到全局環(huán)境中,因此下載的時(shí)候終端路徑是什么都可以)
- 運(yùn)行:nodemon 待執(zhí)行的目標(biāo) js 文件
總結(jié)
1. 本地軟件包和全局軟件包區(qū)別?
? 本地軟件包,作用在當(dāng)前項(xiàng)目,封裝屬性和方法
? 全局軟件包,本機(jī)所有項(xiàng)目使用,封裝命令和工具
2. nodemon 作用?
? 替代 node 命令,檢測(cè)代碼更改,自動(dòng)重啟程序
3. nodemon 怎么用?
? 先確保安裝 npm i nodemon -g
? 使用 nodemon 執(zhí)行目標(biāo) js 文件
七、Node.js總結(jié)
1.Node.js 模塊化:
概念:每個(gè)文件當(dāng)做一個(gè)模塊,獨(dú)立作用域,按需加載
使用:采用特定的標(biāo)準(zhǔn)語(yǔ)法導(dǎo)出和導(dǎo)入進(jìn)行使用
CommonJS 標(biāo)準(zhǔn):一般應(yīng)用在 Node.js 項(xiàng)目環(huán)境中
ECMAScript 標(biāo)準(zhǔn):一般應(yīng)用在前端工程化項(xiàng)目中
2.Node.js 包
Node.js 包:
-
概念:把模塊文件,代碼文件,其他資料聚合成一個(gè)文件夾
-
包的分類
? 項(xiàng)目包:編寫(xiě)項(xiàng)目需求和業(yè)務(wù)邏輯的文件夾
? 軟件包:封裝工具和方法進(jìn)行使用的文件夾(一般使用 npm 管理)
? 軟件包分類:
? ? 本地軟件包:作用在當(dāng)前項(xiàng)目,一般封裝的屬性/方法,供項(xiàng)目調(diào)用編寫(xiě)業(yè)務(wù)需求
? ? 全局軟件包:作用在所有項(xiàng)目,一般封裝的命令/工具,支撐項(xiàng)目運(yùn)行
3.常用命令
,然后自動(dòng)重啟程序
使用nodemon:
- 安裝:npm i nodemon -g(-g 代表安裝到全局環(huán)境中,因此下載的時(shí)候終端路徑是什么都可以)
- 運(yùn)行:nodemon 待執(zhí)行的目標(biāo) js 文件
總結(jié)
1. 本地軟件包和全局軟件包區(qū)別?
? 本地軟件包,作用在當(dāng)前項(xiàng)目,封裝屬性和方法
? 全局軟件包,本機(jī)所有項(xiàng)目使用,封裝命令和工具
2. nodemon 作用?
? 替代 node 命令,檢測(cè)代碼更改,自動(dòng)重啟程序
3. nodemon 怎么用?
? 先確保安裝 npm i nodemon -g
? 使用 nodemon 執(zhí)行目標(biāo) js 文件
七、Node.js總結(jié)
1.Node.js 模塊化:
概念:每個(gè)文件當(dāng)做一個(gè)模塊,獨(dú)立作用域,按需加載
使用:采用特定的標(biāo)準(zhǔn)語(yǔ)法導(dǎo)出和導(dǎo)入進(jìn)行使用
[外鏈圖片轉(zhuǎn)存中…(img-utaMSZxB-1710427561669)]
CommonJS 標(biāo)準(zhǔn):一般應(yīng)用在 Node.js 項(xiàng)目環(huán)境中
ECMAScript 標(biāo)準(zhǔn):一般應(yīng)用在前端工程化項(xiàng)目中
2.Node.js 包
Node.js 包:
-
概念:把模塊文件,代碼文件,其他資料聚合成一個(gè)文件夾
-
包的分類
? 項(xiàng)目包:編寫(xiě)項(xiàng)目需求和業(yè)務(wù)邏輯的文件夾
? 軟件包:封裝工具和方法進(jìn)行使用的文件夾(一般使用 npm 管理)
? 軟件包分類:
? ? 本地軟件包:作用在當(dāng)前項(xiàng)目,一般封裝的屬性/方法,供項(xiàng)目調(diào)用編寫(xiě)業(yè)務(wù)需求
? ? 全局軟件包:作用在所有項(xiàng)目,一般封裝的命令/工具,支撐項(xiàng)目運(yùn)行
[外鏈圖片轉(zhuǎn)存中…(img-4aLpJCdz-1710427561671)]文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-844478.html
3.常用命令
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-844478.html
到了這里,關(guān)于Node.js 學(xué)習(xí)筆記 fs、path、http模塊;模塊化;包;npm的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!