Node.js基础入门
简介
Node.js是一个基于Google V8引擎的、跨平台的JavaScript运行环境
特点
- 异步I/O
- 单线程
- 跨平台
异步 I/O
当Node.js执行I/O操作时,会在响应返回时再恢复操作,而不是阻塞线程并浪费CPU循环等待
- 代码编写顺序和执行顺序无关
单线程
Node.js保持了JavaScript在浏览器中单线程的特点
- 优点:
- 不用处处在意状态同步问题,不会发生死锁
- 没有线程上下文切换带来的性能开销
- 缺点:
- 无法利用多核CPU
- 错误会引起整个应用的退出,健壮性不足
- 大量计算会占用CPU,导致无法继续执行
跨平台
兼容 Windows 和 Linux 平台,主要得益于在操作系统与 Node 上层模块系统之间构建了一层平台架构
模块化机制 -
模块化:根据功能或业务将一个大程序拆分成互相依赖的小文件,再用简单的方式拼接起来
无模块化问题
- 所有script标签必须保证顺序正确,否则会依赖报错
- 全局变量存在命名冲突,占用内存无法被回收
- IIFE/namespace 会导致代码可读性低等诸多问题
CommonJS VS EMS
// CommonJS模块 demo 1 2
//demo1.js
const prefix = 'hello';
const sayHi = (() => {
return prefix + ' world'
})
module.exports = {
sayHi,
}
//demo2.js
const sayHi = require('./demo1.js');
console.log(sayHi.sayHi()) //hello world
// ES Modules demo 3 4
//demo3.mjs
const prefix = 'hello';
export const sayHi = (() => {
return prefix + ' world'
})
//demo4.mjs
import { sayHi } from './demo3.mjs';
console.log(sayHi()) //hello world
- CommonJS模块输出的是一个值的拷贝;EMS模块输出的是值的引用
- CommonJS模块是运行时加载;EMS模块是编译时输出(提前加载)
包管理机制 -- NPM
npm -v 可查看npm版本号
常用命令
- npm init -- 初始化,自动生成 package.json
- npm config -- 获取配置项
- npm run -- 运行
- npm install -- 安装
- npm uninstall -- 卸载
- npm update -- 更新
- npm info -- 查看包的信息
- npm publish -- 发行
异步编程
Callback
- 读取 package.json 中 main 字段对应的文件内容
Promise
- Promise 是一个具有四个状态的有效状态机,其中三个核心状态为 Pending(挂起)、Fulfilled(完成)、Rejected(拒绝),以及还有一个未开始状态。
await
- await函数使用try catch捕获异常
Event
- 发布订阅模式,Node.js内置events模块