Node.js
Node.js
一、什么是Node.js?
Node.js 是一个跨平台 JavaScript 运行环境,使开发者可以搭建服务器端的 JavaScript 应用程序。
1、作用
- 编写数据接口,提供网页资源浏览功能等等
- 前端工程化:开发项目直到上线,过程中集成的所有工具和技术
2、Node.js 与浏览器环境的 JS 的最大区别
Node.js 可以主动读取文件,但是 Node.js 环境中没有 BOM 和 DOM
二、Node.js 的使用
运行JS文件
node xxx.js
三、fs 模块 - 读取文件
什么是 fs 模块?
封装了与本机文件系统进行交互的,方法/属性
语法:
- 加载 fs 对象
const fs = require('fs')
- 写入文件内容
fs.writeFile('文件路径', '写入内容', err => {
//写入后的回调
})
- 读取文件内容
fs.readFile('文件路径', (err, data) => {
//读取后的回调
//data 是文件内容的 Buffer 数据流
})
四、path 模块 - 路径处理
__dirname 内置变量(获取当前模块目录-绝对路径)
注意: path.join() 会使用特定于平台的分隔符,作为定界符,将所有给定的路径片段连在一起
语法:
- 加载 path 模块
const path = require('path')
- 使用 path.join() 方法,拼接路径
path.join('路径1','路径二',...)
path.join() 一般与 __dirname 一起使用
path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。
path.join() 与 path.resolve() 的区别
- join 只是把各个 path 片段连接在一起
- resolve 把‘/’当成根目录
- resolve 在传入非 / 路径时,会自动加上当前目录形成一个绝对路径
五、压缩前端 html
const fs = require('fs')
const path = require('path')
fs.readFile(path.join(__dirname,'test2.html'),(err, data) => {
if(err) console.log(err)
else {
const htmlStr = data.toString()
const resultStr = htmlStr.replace(/[\r\n]/g,'')
fs.writeFile(path.join(__dirname,'test2.html'), resultStr, err => {
if(err) console.log(err);
else console.log('写入成功');
})
}
})
六、http 模块
加载 http 模块,创建 web 服务对象
const http = require('http')
const server = http.createServer()
监听 request 请求事件,设置响应头和响应体
server.on('request', (req, res) => {
res.setHeader('Content-Type', 'text/plain;charset=utf-8')
//end 为请求后显示的内容
res.end('')
})
// 3000 为请求的端口号
server.listen(3000, () => {
consle.log('')
})
七、Node.js 模块化
1、什么是模块化?
在 Node.js 中,每个文件都被视为一个单独的模块。
好处
- 提高代码复用性,按需加载,独立作用域
使用
- 需要标准语法导出和导入进行使用
2、CommonJS 标准
CommonJS 模块是为 Node.js 打包 JavaScript 代码的原始方式
导出:
module.exports = {}
导入:
require('模块名或路径')
3、ECMAScript 标准 - 默认导出和导入
注意
使用 ECMAScript 标准语法,在运行模块所在的文件夹新建 package.json 文件,并设置
{“type” : "module"}
导出:
export default{}
导入:
//变量名自己定义
import 变量名 from '模块名或路径'
4、ECMAScript 标准 - 命名导出和导入
导出:
expert 修饰定义语句
导入:
import { 同名变量 } from '模块名或路径'
如何选择导出和导入的方式:
按需加载,使用命名导出和导入
全部加载,使用默认导出和导入
八、包的概念
包:将模块,代码,其他资料聚合成一个文件夹
包分类:
-
软件包(全局包):封装工具和方法进行使用
-
项目包:主要用于编写项目和业务逻辑(安装在项目的 node_modules 目录的包)
- 开发依赖包(被记录到 devDependencies 节点中的包,只在开发过程中用到
- 核心依赖包(被记录到 dependencies 节点的包,在开发和项目上线之后都会用到)
要求:根目录中,必须有 package.json 文件(记录包的清单信息)
根目录应该包含三个文件:
index.js
package.json
README.md
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMqmmxNI-1689042465911)(C:\Users\mzhj\AppData\Roaming\Typora\typora-user-images\image-20230703204858111.png)]
**注意:**导入软件包时,引入的默认是 index.js 模块文件 / main 属性指定的模块文件
发布 npm 包
-
注册 npm 账号 (httpsL//www.npmjs.com/)
-
登录 npm 账号,在终端输入 npm login 命令,依次输入用户名、密码、邮箱后,即可登录成功(登录之前将服务器地址切换为 npm 官方地址,否则会登录失败)
-
将终端切换到包的根目录,运行 npm publish 命令,即可发布包(包名不能雷同)
九、npm - 软件包管理
定义:
npm 是 Node.js 标准的软件包管理器。
使用:
- 初始化清单文件:
npm init -y //得到 package.json 文件,有则略过此命令
- 下载软件包:
npm i 软件包名称
- 安装所有依赖:
npm i
十、npm - 全局软件包 nodemon
软件包区别:
- 本地软件包:当前项目内使用,封装属性和方法,存在于 node_modules
- 全局软件包:本机所有项目使用,封装命令和工具,存在与系统设置的位置
nodemon 作用
- 代替 node 命令,检查代码更改,自动重启程序
使用:
- 安装
npm i nodemon -g ( -g 代表全局安装)
- 运行
nodemon 目标文件
十一、Node.js 常用命令总结
功能 | 命令 |
---|---|
执行 js 文件 | node xxx |
初始化 package.json | npm init -y |
下载本地软件包 | npm i 软件包名 |
下载全局软件包 | npm i 软件包名 -g |
删除软件包 | npm uni 软件包名 |
十二、淘宝 npm 镜像服务器
切换 npm 的下包镜像源
- 查看当前的镜像源
npm config get registry
- 切换镜像源
npm config set register=https://register.npm.taobao.org/
npm init -y |
| 下载本地软件包 | npm i 软件包名 |
| 下载全局软件包 | npm i 软件包名 -g |
| 删除软件包 | npm uni 软件包名 |
十二、淘宝 npm 镜像服务器
切换 npm 的下包镜像源
- 查看当前的镜像源
npm config get registry
- 切换镜像源
npm config set register=https://register.npm.taobao.org/