Skip to main content

Node

简介

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。

简单说,node 就是一个可以运行 js 代码的环境,不是一门编程语言,可以做服务器端开发

  1. node 运行的 js 是指 ECMAScript,不能运行 BOM 和 DOM 的 API(如windowdocument等对象),可以使用 console 和定时器等
  2. node 中的顶级对象是global,也可以使用globalThis(是 ES2020 支持的)

特点

  • 单线程
  • 异步式 I/O
  • 事件驱动
  • 跨平台

这里的单线程是指主线程是单线程的,主线程还能有其他子线程。因为是单线程,所以只要有一个任务耗时非常长,后面的任务必须要排队等待,会拖延整个程序执行,从而降低了效率,于是提出了异步的思想。在执行代码的时候,主线程从上往下依次执行,遇到有需要回调的地方,就将此处加入到事件队列中,然后主线程继续往下走,直到运行结束以后,才去执行事件队列中的回调

事件驱动,是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积

Node 命令

# 查看node版本
node -v

# 查看npm版本
npm -v

# 查看node安装目录
which node

# 查看官方所有的node版本
npm view node versions

管理 node 版本

在维护一些老项目时通常需要降低 node 的版本,如遇到 node-gyp 报错、node-sass 报错等。

node 和 node-sass 对应版本: https://www.npmjs.com/package/node-sass

使用 n 模块管理

https://github.com/tj/n

# 清除npm缓存
sudo npm cache clean -f

# 全局安装 n 模块
sudo npm install -g n

# 查看是否安装成功
n -V

# 查看已安装的node版本
n ls

# 安装指定版本,如 14.12.0
sudo n 14.12.0

# 更新node到最新的稳定版
sudo n stable

# 更新node到最新版本
sudo n latest

# 切换版本,输入 n 回车,上下键选择版本,回车安装
sudo n

# 删除指定版本,如 14.12.0,删除后用 n 切换一下版本
sudo n rm 14.12.0

# 卸载 n
sudo npm uninstall n -g

require 载入模块

Node.js 默认是使用CommonJS规范

  • require 方法用来载入模块的
  • moule.exports 用来导出模块的

载入系统模块和第三方模块不需要写路径,直接写名称即可,但是载入自定义模块需要写路径

const http = require('http');

const myapp = require('../com/my.js');

require 加载第三方包的机制:

  1. 第三方包安装好后,这个包一般会存放在当前项目的 node_modules 文件夹中。找到这个包的 package.json 文件,并且找到里面的 main 属性对应的入口模块,这个入口模块就是这个包的入口文件
  2. 如果第三方包中没有找到 package.json 文件,或者没有 main 属性,则默认加载第三方包中的 index.js 文件
  3. 如果在 node_modules 文件夹中没有找到这个包,或者以上所有情况都没有找到,则会向上一级父级目录下查找 node_modules 文件夹,查找规则如上一致
  4. 如果一直找到该模块的磁盘根路径都没有找到,则会报错:can not find module xxx