Node是什么
Node.js是一個基于V8引擎運行環(huán)境。
- v8引擎:JS的渲染器
Node.js是一個服務(wù)器平臺掉瞳。
Node.js底層使用C++編寫的。
Node.js是安裝在操作系統(tǒng)上的一個程序,這個程序的工作的時候是跟操作系統(tǒng)在對話溺蕉。(交互)
Node執(zhí)行js的方式
在Node.js中奏属,運行js代碼的方式有兩種
- 直接運行js文件:
node app.js
- 使用
REPL
模式運行js代碼- R:Read讀取js代碼
- E: Execute執(zhí)行JS代碼
- P:Print打印js代碼
- L: Loop 循環(huán)js代碼
NodeJS VS 瀏覽器
Node和瀏覽器都是運行js的環(huán)境
Node.js | 瀏覽器 | |
---|---|---|
語法相同 | 支持ECMAScript | 支持ECMAScript |
API不同 | Global跨跨、module、buffer囱皿、domain等 | BOM勇婴、DOM |
老大不同 | Global | window |
交互對象 | 在node.js運行js,是和操作系統(tǒng)對話 | 在瀏覽器中運行js嘱腥,耕渴,是和瀏覽器對話 |
module API是什么
module
是一個內(nèi)置的全局對象。module
用于表示模塊齿兔。-
模塊:模塊就是封裝在一個js文件中的代碼塊橱脸。(在Node的模塊系統(tǒng)中,每一個js文件都是一個模塊)
const sum = (a,b) => { return a + b } const minus = (a,b) => { return a - b }
-
module對象
> module
Module {
id: '<repl>',
path: '.',
exports: {},
filename: null,
loaded: false,
children: [],
paths: [
'/Users/zj/Desktop/7/0327/repl/node_modules',
'/Users/zj/Desktop/7/0327/node_modules',
'/Users/zj/Desktop/7/node_modules',
'/Users/zj/Desktop/node_modules',
'/Users/zj/node_modules',
'/Users/node_modules',
'/node_modules',
'/Users/zj/.node_modules',
'/Users/zj/.node_libraries',
'/usr/local/lib/node'
]
}
NodeJS中的module系統(tǒng)分為幾種分苇?
模塊系統(tǒng)的背景
JS缺點1:沒有模塊
-
JS缺點2:存在命名沖突(set map 模塊)
<head> <script src='./jquery.js'></script> <script scr='./tquery.js'></script> <script scr='./script.js'></script> </head>
CommonJS : 面向服務(wù)器 通過
Require()
RequireJS: 基于CommonJS的一個包裝添诉。
AMD: Asynchrouns Module D? :面向瀏覽器
Node.js的模塊系統(tǒng)分為兩種
- CommonJS: Node.js的默認(rèn)模塊系統(tǒng)。采用第三方的模塊系統(tǒng)组砚。
- ECMAScript: 是Node.js的標(biāo)準(zhǔn)模塊系統(tǒng)吻商。(向原生語言看齊)
NodeJS中的module分為幾種?
- 本地模塊:在項目中糟红,由開發(fā)者創(chuàng)建的模塊艾帐。
- 內(nèi)置模塊:由Node.js提供的預(yù)設(shè)模塊乌叶。
- 內(nèi)置模塊是全局模塊。
- 內(nèi)置模塊是Node.js的核心模塊柒爸。
- 第三方模塊: 在項目中准浴,由其他開發(fā)者創(chuàng)建的模塊。
NPM是什么
- NPM: Node Package Manager Node軟件包管理器
- NPM就是Node.js平臺的商店捎稚。
CommonJS模塊系統(tǒng)
module對象
定義
- module對象表示一個模塊乐横。
- 一個JS文件就是一個模塊。
- 模塊是封裝在js文件中代碼塊今野,擁有獨立的作用域葡公。
- module對象是一個全局對象。
module.prototype.require()
定義
require()
方法用于加載外部模塊条霜。
-
require()
是node的一個內(nèi)置函數(shù)催什。 -
require()
在工作的時候,它用于包裹(讀取+執(zhí)行)模塊文件中的代碼塊宰睡。
語法
module.require(id)
require(id) //module是全局對象蒲凶,可省略
Id: 表示加載的模塊的文件名
返回值
返回從模塊文件中導(dǎo)出的模塊
示例
module.exports
定義
module.exports
用于暴露/導(dǎo)出/分享模塊。(暴露作用域)
-
module.exports
是一個對象拆内。 -
Module.exports
用于包裹要導(dǎo)出的模塊旋圆。
語法
//語法1:導(dǎo)出單個變量(變量名、函數(shù)名麸恍、類名)
const sum = (a,b) => {
return a + b
}
module.exports = sum //單個變量名
//語法2:導(dǎo)出單個直接量
module.exports = (a,b) => {
return a + b
}
//語法3:導(dǎo)出多個變量
const sum = (a,b) => {
return a + b
}
const minus = (a,b) => {
return a - b
}
module.exports = {
// sum:sum,
// minus: minus
sum,
minus
}
//語法4:導(dǎo)出多個變量
module.exports.sum = (a,b) => {
return a + b
}
module.exports.minus = (a,b) => {
return a - b
}
//語法5:導(dǎo)出多個變量
module.exports = {
sum : (a,b) => {
return a + b
},
minus : (a,b) => {
return a - b
}
}
//語法6:導(dǎo)出多個變量
const obj = {
sum : (a,b) => {
return a + b
},
minus : (a,b) => {
return a - b
}
}
module.exports = obj
APP1.js
const math = module.require('./lib1')
// const {sum,minus} = math
console.log(math.sum(3,3));
console.log(math.minus(3,3));
// console.log(sumFn(3,3))
http 內(nèi)置模塊
http.createServer()
定義:用于創(chuàng)建node服務(wù)器
- 創(chuàng)建服務(wù)端和客戶端通信的方式
- res對象:使用響應(yīng)對象設(shè)置響應(yīng)頭
- 響應(yīng)頭:用于通知瀏覽器:
- 狀態(tài)碼
- 數(shù)據(jù)類型是什么
- 數(shù)據(jù)
- 其他參數(shù)
- 響應(yīng)頭:用于通知瀏覽器:
- req對象:使用請求對象解析請求頭
- 請求頭:包含了請求的具體信息
- 請求方法:get post put delete
- 請求數(shù)據(jù)
- 請求的地址
- 瀏覽器信息
- 等其他信息
語法
http.createServer((req,res)=>{
//1.解析請求
//2.處理響應(yīng)
})
返回值
示例
res.weiteHead()
定義:用于設(shè)置響應(yīng)頭信息
語法
返回值
示例
res.end()
定義:用于通知客戶端響應(yīng)結(jié)束灵巧。結(jié)束的時候可以攜帶一些數(shù)據(jù)
語法
返回值
示例
server.listen()
定義:用于設(shè)置服務(wù)器的監(jiān)聽端口
語法
返回值
示例
Node監(jiān)聽
定義:Node監(jiān)聽就是在不重啟服務(wù)器的情況下,自動刷新頁面
語法:
node --watch 文件地址
示例:
node --watch './app/index.js'
Content-Type
定義:Content-Type
用于指定響應(yīng)頭的數(shù)據(jù)類型
語法:
{"Content-Type":屬性值}
屬性值:
- text/plain:普通文本
- text/html:HTML文本
- application/json:JSON文本
全局變量
__dirname
定義:表示當(dāng)前文件(模塊)所在的目錄名稱
- Dir:文件夾抹沪、目錄
- name:名字
語法:
console.log(__dirname)//全局直接調(diào)用
示例:
console.log(__dirname);
//D:\web前端\2023第二期\三月\0329
絕對路徑 VS 相對路徑
# 絕對路徑
\Users\zj\Desktop\7\0329
\zj\Desktop\7\0329
\Desktop\7\0329
# 相對路徑有三種
images/aaa.jpg
./images/aaa.jpg
../images/aaa.jpg
__filename
定義:表示當(dāng)前文件(模塊)的名稱
- file:文件
- name:名字
示例:
console.log(__filename);
//D:\web前端\2023第二期\三月\0329\1.giobai.js
內(nèi)置模塊path
定義:node:path
是一個內(nèi)置模塊孩等,它提供了處理路徑的API。路徑分為:
- 文件路徑
- 文件夾路徑
使用path
模塊采够,第一步要做什么?
path.basename()
定義:
語法:
path.basename('路徑','刪除的后綴名')
返回值:返回路徑最后一部分
示例:
const path = require('node:path')
console.log(__filename);
console.log(path.basename(__filename));
console.log(path.basename(__filename,'.js'));
console.log(path.basename(__dirname));
輸出結(jié)果:
D:\web前端\2023第二期\三月\0329\2-path.js
2-path.js
2-path
0]\]]
path.dirname(path)
定義:用于返回當(dāng)前目錄的路徑
語法:
path.dirname('path')
返回值:
示例:
const path = require('node:path')
console.log(__dirname)
console.log(path.dirname(__dirname));
輸出結(jié)果
D:\web前端\2023第二期\三月\0329
D:\web前端\2023第二期\三月
path.extname(path)
定義:返回的是當(dāng)前文件的擴(kuò)展名
語法:
返回值:
path.parse()
定義:從路徑字符串返回一個對象
語法:
path.parse('路徑')
返回值:返回一個表示路徑的對象
示例:
const path = require('node:path')
console.log(__filename)
console.log(path.parse(__filename));
輸出結(jié)果:
D:\web前端\2023第二期\三月\0329\2-path.js
{
root: 'D:\\',
dir: 'D:\\web前端\\2023第二期\\三月\\0329',
base: '2-path.js',
ext: '.js',
name: '2-path'
}
path.format()
定義:從路徑對象轉(zhuǎn)路徑字符串
語法
path.format(路徑對象)
返回值:返回路徑字符串
示例
const path = require('node:path')
console.log(__filename)
console.log(path.parse(__filename));
const obj = path.parse(__filename)
console.log(path.format(obj));
輸出結(jié)果
D:\web前端\2023第二期\三月\0329\2-path.js
{
root: 'D:\\',
dir: 'D:\\web前端\\2023第二期\\三月\\0329',
base: '2-path.js',
ext: '.js',
name: '2-path'
}
D:\web前端\2023第二期\三月\0329\2-path.js
path.join()
定義:用于把路徑片段連接為規(guī)范路徑
語法:
path.join()
path.join('路徑片段1','路徑片段2',...)
返回值:
示例
const path = require('node:path')
const p1 = path.join('fold1', 'folder2', 'index.html')
console.log(p1);
const p2 = path.join('/fold1', 'folder2', 'index.html')
console.log(p2);
const p3 = path.join('/fold1', '/folder2', 'index.html')
console.log(p3);
const p4 = path.join('/fold1', '//folder2', 'index.html')
console.log(p4);
const p5 = path.join('/fold1', '//folder2', './index.html')
console.log(p5);
const p6 = path.join('/fold1', '//folder2', '../index.html')
console.log(p6);
輸出結(jié)果
fold1\folder2\index.html
\fold1\folder2\index.html
\fold1\folder2\index.html
\fold1\folder2\index.html
\fold1\folder2\index.html
\fold1\index.html
path.isAbsolute()
定義:用于檢測一個路徑是否是絕對路徑
語法
path.isAbsolute(path)
返回值:返回布爾值;true或false
示例
console.log(path.isAbsolute(__filename));
//true
path.resolve()
定義:用于解析絕對路徑
語法:
path.resolve([...paths])//路徑片段
返回值:返回絕對路徑字符串
示例:
const p1 = path.resolve('fold1', 'folder2', 'index.html')
console.log(p1);
const p2 = path.resolve('/fold1', 'folder2', 'index.html')
console.log(p2);
const p3 = path.resolve('/fold1', '/folder2', 'index.html')
console.log(p3);
const p4 = path.resolve('/fold1', '//folder2', 'index.html')
console.log(p4);
const p5 = path.resolve('/fold1', '//folder2', './index.html')
console.log(p5);
const p6 = path.resolve('/fold1', '//folder2', '../index.html')
console.log(p6);
輸出結(jié)果
D:\web前端\2023第二期\三月\0329\fold1\folder2\index.html
D:\fold1\folder2\index.html
D:\folder2\index.html
D:\folder2\index.html
D:\folder2\index.html
D:\index.html
FS模塊(FS系統(tǒng))
定義:FS文件系統(tǒng)模塊允許操作計算機(jī)系統(tǒng)上的文件冰垄。
具體操作如下:
- 讀取
- 創(chuàng)建
- 修改
- 刪除
引入FS文件系統(tǒng)
要使用fs文件系統(tǒng)蹬癌,請先引入fs模塊
語法:基于Promise API(標(biāo)準(zhǔn))
語法:基于回調(diào)函數(shù)(默認(rèn))
const fs = require('node:fs')
fs.readFile()
定義:用于異步讀取文件內(nèi)容
語法:
fs.readFile('文件路徑','callback')
fs.readFile('文件路徑','err,data') => {
if(err) console.log(err)
console.log(data)
}
返回值:返回讀取成功的內(nèi)容
數(shù)據(jù)類型:buffer
示例:
fs.writeFile
定義:用于異步的寫入文件數(shù)據(jù)
語法:
fs.writeFile(file, data[, options], callback)
返回值:
示例:
npm
定義:Node軟件包管理工具
- npm的主要內(nèi)容
- 安裝軟件包
- 刪除軟件包
- 分享你自己寫的軟件包(npmjs.com)
- npm是世界上最大軟件包平臺
- npm的構(gòu)成:
- 官網(wǎng)(http://npmjs.com):查詢軟件包
- CLI(Command Line Interface):命令行交互工具
- 軟件注冊表:JS軟件包的倉庫
node_modules
- 用于存儲第三方模塊的文件
package是什么
- 意思:軟件包
- 一個package由一個或多個模塊組成
package.json
- 用于描述你的模塊文件
- 用于配置你的模塊文件
- package.json描述如何使用軟件包
- 一個package(軟件包)必須包含一個
package.json
文件。
創(chuàng)建方法:
- 手動創(chuàng)建
- 半自動:npm init命令創(chuàng)建
- 自動:npm init - yes命令創(chuàng)建
node_modules
- 用于存儲第三方模塊的文件
- 打包項目發(fā)給別人之前虹茶,可刪除node_modules文件夾逝薪,以減少文件體積
- 注意:package.json 和 package-lock.json不能刪
- 可使用
npm install
重新安裝模塊
module
- 模塊就是一個js文件或文件夾
- 所有的模塊必須擁有
package.json
文件
第三方模塊的使用方法
第一步:創(chuàng)建文件夾
mkdir buhaoqi-package
第二步:創(chuàng)建index.js
cd buhaoqi-package
New-item index.js
第三步:安裝upper-case模塊
npm install upper-case
第四步:修改index.js內(nèi)容
const upperCase = require('upper-case').upperCase
function hello(name){
console.log(upperCase(`hello ${name},good good study!`));
}
hello('zhangsan')
module.exports = hello
第五步:運行index.js
node index
輸出結(jié)果
HELLO ZHANGSAN,GOOD GOOD STUDY蝴罪!
版本號
npm采用的是Sementic Version Controls系統(tǒng)
語法
X.Y.Z
1.1.3
初始版本號一般默認(rèn):0.1.0
正式發(fā)布:1.0.0
X : Major Version 主版本號:較大變化
Y: Minor Version 副版本號:增加了一個函數(shù)
Z: patch Version Bug版本號:修復(fù)bug
待續(xù)……