Node基础

368 阅读3分钟

记录青训营中Node方面的知识点

Node.js简介

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

以下是推荐的版本管理工具

  1. n:npm全局的开源包,是依赖npm来全局安装,使用
  2. fnm:快速简单,兼容性支持 .node-version.nvmrc文件
  3. nvm:独立的软件包,全程Node Version Manager

Node.js的特点

Node有3个特点

异步I/O

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

image.png

单线程

 优点:
 
  - 不用在意状态同步问题,不会发生**死锁**
  - 没有线程上下文切换带来的性能开销
 
 缺点:
 
  - 无法利用多核CPU
  - 错误会引起整个应用退出,健壮性不足
  - 大量计算占用导致CPU,无法继续执行
  

跨平台

兼容Windows和(linux衍生)*nix平台,主要的得益于在操作系统和Node上层模块系统之间构建了一层平台架构

image.png

Node.js中的模块化机制

CommnJS规范

Node.js支持CommonJS模块规范,采用同步机制加载模块

//name.js
const Name = function(){
    console.log('my name is yierya')
}
module.exports = {
    Name
}
//index.js
const {name} require('./name.js')
name() //my name is yierya
  • expotts: 可以导出模块,是作为module的子方法
  • require: 在当前模块引入其他模块,查看更多加载方式
  • module : 包含当前模块的全部信息,创建模块等方法如module.exports
  • __filename:当前模块的文件路径:解析后的绝对路径
  • __dirname:存放当前模块的文件夹路径

npm包查询原则

//以引入一个lodash为例
require('lodash')
1.当前目录的 node_modules
2.如果没有,父级目录的node_modules
3.如果没有,沿着路径向上递归,直到根目录底下node_modules
4.找到之后会加载package.json main指向的文件,如果没有package.json则一次查找index.js,index.json,index.node  

image.png


缓存机制

Node.js中存在缓存机制,会将读到的文件存放在require.cache中,缓存的原因是:同步加载

  1. 文件模块查找耗时,如果每次require都需要重新遍历查找,性能较差
  2. 在实际开发中,模块可能包含副作用代码
//有缓存
const mod1 = require('./foo');
const mod2 = require('./foo');
console.log(mod1 === mod2); //true
//无缓存
function requireUncached(module){
    delete require.cache[require.resolve(module)];
    return reuire(module);
}
const mod3 = requireUncached('./foo');
consolo.log(mod1 === mod3); false

其他模块化规范

  • AMD: 是RequireJS在推广过程中规范化产出,异步加载,推崇依赖前置
  • CMD:是SeaJS在推广过程中规范化产出,异步加载,推崇就近依赖
  • UMD:兼容AMDCommonJS规范
  • ES:语言层面的模块化规范,与环境无关,可借助babel编译,也就是俗称ES6中的ES

image.png

ES Modules

  • ESM是在ES6语言层面提出的一种模块化标准
  • ESM中主要有import,export两个关键字,不能console打印两个关键字

ES Modules和CommonJS的差别

  • CommonJS模块输出的是一个值的拷贝,ESM模块输出的是值的引用

  • CommonJS模块是运行时加载,ESM模块是编译时输出(提前加载)

  • 更多差异

    可以混用但是不建议(import commonjs||import中require)

部分常用模块介绍

详细模块介绍

image.png

image.png

image.png

npm介绍

NPM是Node.js中的包管理器,提供了安装,删除等其他命令来管理

输入npm init会在目录底下生产一个package.json文件

package.json配置信息

npm 设置源操作如下npm config set registry=你的源路径,推荐用nrm工具管理npm源

异步编程

callback

promise

Promise是一个具有四个状态的有限状态机,其中三个核心状态为Pending(挂起),Fulfilled(完成),Rejected(拒绝),以及还有一个未开始状态 Promise中的更多方法 image.png

async

它是基于Promise的语法糖,将 async 关键字加到函数申明中,可以告诉它们返回的是 promise,而不是直接返回值。此外,它避免了同步函数为支持使用 await 带来的任何潜在开销。

async function hello() {
  return greeting = await Promise.resolve("Hello");
};

hello().then(alert);

event

发布订阅模式,Node.js内置evets模块 比如Htt server on('request')事件监听