Node.js基础入门

363 阅读2分钟

Node.js基础入门

简介

Node.js是一个基于Google V8引擎的、跨平台的JavaScript运行环境

特点

  • 异步I/O
  • 单线程
  • 跨平台

异步 I/O

Node.js执行I/O操作时,会在响应返回时再恢复操作,而不是阻塞线程并浪费CPU循环等待

  • 代码编写顺序和执行顺序无关

异步IO.png

单线程

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(拒绝),以及还有一个未开始状态。

Promise.png

await

  • await函数使用try catch捕获异常

Event

  • 发布订阅模式,Node.js内置events模块