定义

  1. 定义:Node.js 是一个跨平台的 JavaScript 运行环境,使开发者可以搭建服务器端的 JavaScript 应用程序
  2. 作用:使用 Node.js 编写服务器端程序
  • 编写数据接口,提供网页资源浏览功能等等
  • 前端工程化
  1. 能够执行JS代码的原因:首先,浏览器能执行JS代码,依靠的是内核中的V8引擎(C++程序)。其次,Node.js是基于Chrome V8引擎进行封装(运行环境)。区别,都支持ECMAScript标准语法,Node.js 有独立的API

Node.js 环境没有DOM和BOM等

  1. 在Node.js环境中运行js代码

在终端中输入:node xxx.js 回车即可执行(注意路径)

前端工程化

前端工程化:开发项目直到上线,过程中集成的所有工具和技术

Node.js 是前端工程化的基础(因为 Node.js 可以主动读取前端代码内容)

fs 模块 - 读写文件

  1. 模块:类似插件,封装了方法/属性
  2. fs模块:封装了与本机文件系统进行交互的方法和属性
  3. 语法:
  • 加载fs模块对象
1
const fs = require('fs') // fs 是模块标识符:模块的名字
  • 写入文件内容
1
2
3
fs.writeFile('文件路径', '写入内容', err => {
// 写入后的回调函数
})
  • 读取文件内容
1
2
3
4
fs.readFile('文件路径', (err, data) => {
// 读取后的回调函数
// data 是文件内容的 Buffer 数据流
})

path 模块 - 路径处理

  1. 建议:在Node.js代码中,使用绝对路径
  2. 补充:__dirname 内置变量(获取当前模块路径-绝对路径)
  3. 注意:path.join()会使用特定于平台的分隔符,作为定界符,讲多有给定的路径片段连接在一起
  4. 语法
  • 加载path模块
1
const path = require('path') // path 是模块标识符:模块的名字
  • 使用path.join方法,拼接路径
1
path.join('路径1', '路径2', ...)

http 模块 - 创建web服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const http = require('http')
const server = http.createServer()

server.on('request', (req,res) => {
// 设置响应头,内容类型为普通文本;编码格式为utf-8
res.setHeader('Content-Type', 'text/plain;charset-utf-8')
// 设置响应体的内容
res.end('您好,欢迎使用node.js创建的 web 服务')
})

// 监听3000端口并启动web服务
server.listen(3000, () => {
console.log('web 服务已经启动')
})

模块化

定义

  1. 定义:CommonJs 模块是Node.js 打包 JavaScript代码的原始方式,Node.js 还支持浏览器和其他 JavaScript 运行时使用的 ECMAScript 模块标准。在Node.js中,每个文件都被视为一个单独的模块
  2. 概念:项目是由很多个模块文件组成的
  3. 优点:提高代码复用性,按需加载,独立作用域

CommonJs 标准

  1. 使用
  • 导出:module.exports = {}
1
2
3
4
5
6
7
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)

module.exports = {
url: baseURL,
ArraySum: getArraySum
}
  • 导入:require(‘模块名或路径’)
1
2
const obj = require('./utils')
console.log(obj.ArraySum([1, 2, 3]))
  1. 模块名或路径
  • 内置模块:直接写名字(例如:fs,path,http)
  • 自定义模块:写模块文件路径(例如:./utils.js)

ECMAScript 标准 - 默认导出和导入

  1. 默认标准使用
  • 导出: export default {}
1
2
3
4
5
6
7
const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)

export default {
baseURL,
getArraySum
}
  • 导入:import 变量名 from ‘模块名或路径’
1
2
import obj from './utils.js'
console.log(obj.getArraySum([1, 2, 3]))

注意:Node.js 默认支持 CommonJs 标准语法,如需使用ECMAScript 标准语法,在运行模块所在文件夹新建 package.json 文件,并设置{“type”:”module”}

ECMAScript 标准 - 命名导出和导入

  1. 命名标准使用
  • 导出:export 修饰定义语句
1
2
export const baseURL = 'http://hmajax.itheima.net'
export const getArraySum = (arr = []) => arr.reduce((sum, item) => sum += item, 0)
  • 导入:import {同名变量} from ‘模块名或路径’
1
2
3
4
5
import {baseURL, getArraySum} from './utils.js'

console.log(baseURL)
const result = getArraySum([1, 2, 3])
console.log(result)
  1. 如何选择
  • 按需加载,使用命名导出和导入
  • 全部加载,使用默认导出和导入

  1. 定义:将模块,代码,其他资料聚合成一个文件夹
  2. 分类
  • 项目包:主要用于编写项目和业务逻辑
  • 软件包:封装工具和方法进行使用
  1. 要求:根目录中必须有package.json文件(记录包的清单信息)
1
2
3
4
5
6
7
8
{
"name": "cz_utils", 软件包名称
"version": "1.0.0", 软件包当前版本
"description":“一个数组和字符串常用工具方法的包”, 软件包简短描述
"main": "index. js", 软件包入口点
"author":"itheima", 软件包作者
"license": "MIT" 软件包许可证(商用后可以用作者名字宣传)
}

注意:导入软件包时,引入的默认是index.js模块文件/main 属性指定的模块文件

npm - 软件包管理器

  1. 定义:npm 是 Node.js 标准的软件包管理器
  2. 使用
  • 初始化清单列表:npm init -y (得到package.json文件,有则略过此命令)
  • 下载软件包:npm i 软件包名称
  • 使用软件包:导入该软件包即可使用
  1. 安装该项目的所有依赖

一般从网上拷贝的项目中只有package.json 缺少 node.modules 时使用 npm i 即可根据 package.json 记录的素有包和版本开始下载

  1. 软件包的分类
  • 本地软件包:当前项目内使用,封装属性和方法,存在于node_modules
  • 全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置

nodemon

  1. nodemon作用:替代node命令,检测代码更改,自动重启程序
  2. 使用
  • 安装:npm i nodemon -g (-g代表安装到全局环境中)
  • 运行:nodemon待执行的目标js文件