一文带你认识nodejs

author author     2022-12-04     696

关键词:

node.js 初探

Node.js 是一个 JS 的服务端运行环境,简单的来说,它是在 JS 语言规范的基础上,封装了一些服务端的运行时对象,让我们能够简单实现非常多的业务功能。

如果我们只使用 JS 的话,实际上只是能进行一些简单的逻辑运算。node.js 就是基于 JS 语法增加与操作系统之间的交互。

node.js 的安装

我们可以使用多种方式来安装 node.js,node.js 本质上也是一种软件,我们可以使用直接下载二进制安装文件安装,通过系统包管理进行安装或者通过源码自行编译均可。

一般来讲,对于个人开发的电脑,我们推荐直接通过 node.js 官网的二进制安装文件来安装。对于打包上线的一些 node.js 环境,也可以通过二进制编译的形式来安装。

安装成功之后,我们的 node 命令就会自动加入我们的系统环境变量 path 中,我们就能直接在全局使用 node 命令访问到我们刚才安装的 node 可执行命令行工具。

node.js 版本切换在个人电脑上,我们可以安装一些工具,对 node.js 版本进行切换,例如 nvmn

nvm 的全称就是 node version manager,意思就是能够管理 node 版本的一个工具,它提供了一种直接通过 shell 执行的方式来进行安装。简单来说,就是通过将多个 node 版本安装在指定路径,然后通过 nvm 命令切换时,就会切换我们环境变量中 node 命令指定的实际执行的软件路径。

安装成功之后,我们就能在当前的操作系统中使用多个 node.js 版本。

包管理工具 npm

​curl -o- https://raw.githubusercontent.com/nvm- sh/nvm/v0.35.3/install.sh | bash​

我们对 npm 应该都比较熟悉了,它是 node.js 内置的一款工具,目的在于安装和发布符合 node.js 标准的模块,从而实现社区共建的目的繁荣整个社区。

npx 是 npm@5 之后新增的一个命令,它使得我们可以在不安装模块到当前环境的前提下,使用一些 cli 功能。

例如 npx create-react-app some-repo

node.js 的底层依赖

node.js 的主要依赖子模块有以下内容:

V8 引擎

主要是 JS 语法的解析,有了它才能识别 JS 语法\\

libuv

c 语言实现的一个高性能异步非阻塞 IO 库,用来实现 node.js 的事件循环

http-parser/llhttp

底层处理 http 请求,处理报文, 解析请求包等内容

openssl

处理加密算法,各种框架运用广泛

zlib

处理压缩等内容 node.js 常⻅内置模块

主要模块

node.js 中最主要的内容,就是实现了一套 CommonJS 的模块化规范,以及内置了一些常⻅的模块。

fs:

文件系统,能够读取写入当前安装系统环境中硬 盘的数据\\

path:

路径系统,能够处理路径之间的问题

crypto:

加密相关模块,能够以标准的加密方式对我 们的内容进行加解密

dns:

处理 dns 相关内容,例如我们可以设置 dns 服 务器等等\\

http:

设置一个 http 服务器,发送 http 请求,监听 响应等等

readline:

读取 stdin 的一行内容,可以读取、增加、 删除我们命令行中的内容\\

os:

操作系统层面的一些 api,例如告诉你当前系统类 型及一些参数

vm:

一个专⻔处理沙箱的虚拟机模块,底层主要来调 用 v8 相关 api 进行代码解析。

V8 引擎:

github.com/v8/v8​ ​chromium.googlesource.com/v8/v8.git

引擎只是解析层面,具体的上层还有许多具体环境的封装。

Debug & 内存泄漏

对于浏览器的 JS 代码来说,我们可以通过断点进行分步调试,每一步打印当前上下文中的变量结果,来定位具体问题出现在哪一步。

我们可以借助 VSCode 或者自行打断点的形式,来进行分步 node.js 调试。

对于 JS 内存泄漏,我们也可以使用同样的道理,借助工具,打印每次的内存快照,对比得出代码中的问题。

另一种 JS 解析引擎 quickjs

quickjs 是一个 JS 的解析引擎,轻量代码量也不大,与之功能类似的就是 V8 引擎。

他最大的特点就是,非常非常轻量,这点从源码中也能体现,事实上并没有太多的代码,它的主要特点和优势:

  1. 轻量而且易于嵌入: 只需几个C文件,没有外部依赖,一个x86下的简单的“hello world”程序只要180 KiB
  2. 具有极低启动时间的快速解释器: 在一台单核的台式PC上,大约在100秒内运行ECMAScript 测试套件156000次的运行时实例完整生命周期在不到300微秒的时间内完成。
  3. 几乎完整实现ES2019支持,包括: 模块,异步生成器和和完整Annex B(MPEG-2 transport stream format格式)支持 (传统的Web兼容性)。许多ES2020中带来的特性也依然会被支持。 通过100%的ECMAScript Test Suite测试。 可以将Javascript源编译为没有外部依赖的可执行文件。

另一类 JS 运行时服务端环境 deno

deno 是一类类似于 node.js 的 JS 运行时环境,同时它也是由 node.js 之父一手打造出来的,他和 node.js 比有什么区别呢?

相同点:

  • deno 也是基于 V8 ,上层封装一些系统级别的调用我们的 deno 应用也可以使用 JS 开发

不同点:

  • deno 基于 rust 和 typescript 开发一些上层模块,所以我们可以直接在 deno 应用中书写 ts
  • deno 支持从 url 加载模块,同时支持 top level await 等特性

一文带你认识lpwa通信技术

摘要:为了满足越来越多的远距离物联网设备的连接需求,LPWA应用而生。本文分享自华为云社区《常见物联网通信技术之LPWA通信技术》,作者:爱吃面包的猫。如果你比较关注物联网圈的话,想必对LPWA这一... 查看详情

一文带你认识stl序列式容器--list(代码片段)

list什么是listlist的使用构造函数接口list相关迭代器使用容量相关的操作测试链表的修改操作链表的一些其他操作list中的赋值运算符list中的迭代器失效问题vector与list区别(重点)什么是listlist是序列式容器中的一种,... 查看详情

深度学习一文带你了解神经网络,激活函数

神经网络神经网络是深度学习的核心,在了解神经网络之前,我们先来了解几个概念:智能(Intelligence)是个体有目的的行为,合理的思维以及有效的适应环境的综合能力。或者说智能是个体认识客观事物和运用知识解决问题的能力... 查看详情

带你认识数仓的“规格变更”

...实现原理和如何使用进行介绍。本文分享自华为云社区《一文读懂DWS“规格变更”【这次高斯不是数学家】》,作者:codefulture。一、为什么要变更规格?在使用集群的过程,我们一定能遇到这样一种情况:当... 查看详情

一文带你认识springaop(代码片段)

SpringAOP简介AOP(Aspect-OrientedProgramming:面向切面编程)是对OOP(Object-OrientedProgramming:面向对象编程)的补充和完善。OOP引入封装、继承和多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。封装就要求将功能分散到... 查看详情

一文带你从零认识什么是xla

摘要:简要介绍XLA的工作原理以及它在Pytorch下的使用。本文分享自华为云社区《XLA优化原理简介》,作者:拓荒者01。初识XLAXLA的全称是AcceleratedLinearAlgebra,即加速线性代数。作为一种深度学习编译器,长期... 查看详情

经验分享一文带你了解编程入门的通识知识

1.C/C++的历史及特点有关计算机的历史、C语言的历史、C++的历史,以及各自有什么特点,甚至哪年谁谁谁发明了什么等等,请自行网上搜索。2.编程思维乔布斯说过:“每个人都应该学习编程,因为... 查看详情

一文带你认识30个重要的数据结构和算法(代码片段)

摘要:掌握DSA意味着你能够使用你的计算和算法思维来解决前所未见的问题。通过了解它们,您可以提高代码的可维护性、可扩展性和效率。本文分享自华为云社区《30个重要数据结构和算法完整介绍》,作者:... 查看详情

golang|一文带你深入context

前言首先解答上一篇文章一文带你快速入门context中留下的疑惑,为什么要defercancelFunc()?funcmain(){parent:=context.Background()fori:=0;i<100;i++{godoRequest(parent)}time.Sleep(time.Second*10)}//doRequest模拟网络请求funcdoRequest(parentc 查看详情

一文带你入门flinksql(代码片段)

文章目录一文带你入门flinksql写在前面环境准备正文遇到的一些问题错误一错误二错误三一文带你入门flinksql写在前面本次实战主要是通过FlinkSQLClient消费kafka的实时消息,再用各种SQL操作对数据进行查询统计。环境准备具体... 查看详情

laocat带你认识容器与镜像(实践篇二下)(代码片段)

...践篇主要以各容器的挂载和附加命令为主。系列目录LaoCat带你认识容器与镜像(一)LaoCat带你认识容器与镜像(二【一章】)LaoCat带你认识容器与镜像(二【二章】)LaoCat带你认识容器与镜像(二【三... 查看详情

web前端一文带你吃透css(中篇)

前端学习路线小总结:基础入门:HTMLCSSJavaScript三大主流框架:VUEREACTAngular深入学习:小程序NodejQueryTypeScript前端工程化继续学习CSS吧!一.CSS盒子模型(BoxModel)1.CSS盒子模型2.元素的宽度和高度二.CSS边框(Border)1.边框样式 查看详情

web前端一文带你吃透html(下篇)

前端学习路线小总结:基础入门:HTMLCSSJavaScript三大主流框架:VUEREACTAngular深入学习:小程序NodejQueryTypeScript前端工程化一起学习HTML下篇吧!一.HTML区块1.HTML区块元素2.HTML内联元素3.HTML的div元素4.HTML的span元素 查看详情

一文带你认知定时消息发布rocketmq

...DMS任意时间定时消息能力发布。本文分享自华为云社区《一文带你认知定时消息发布RocketMQ》,作者:华为云PaaS服务小智。DMS是华为云的分布式消息中间件服务。适用于解决分布式架构中的系统解耦、跨系统跨地域数据... 查看详情

一文带你搭建rocketmq源码调试环境(代码片段)

tothetargetVM,address:\'127.0.0.1:52279\',transport:\'socket\'Thebroker[broker-a,192.168.10.197:10911]bootsuccess.serializeType=JSONandnameserveris127.0.0.1:98764.3查看启动日志另外我们到logs目录看下启动的详细日志,打开broker. 查看详情

一文带你了解fpga

FPGA是什么FPGA(FieldProgrammableGateArray),现场可编程门阵列,一种半定制的数字集成电路。FPGA凭借其灵活性高、开发周期短、处理性能强(并行)等特点,广泛应用于通信、图像处理、医疗等领域。随着科技的进步,FPGA在人工智... 查看详情

不知道该学那一个语言?一文带你了解三门语言

名字:阿玥的小东东学习:Python。正在学习c++主页:阿玥的小东东目录粉丝留言,回答问题1.首先,初步了解  查看详情

web前端一文带你吃透css(完结篇)

前端学习路线小总结:基础入门:HTMLCSSJavaScript三大主流框架:VUEREACTAngular深入学习:小程序NodejQueryTypeScript前端工程化文章目录一.CSS布局-对齐1.水平对齐1.1元素居中对齐1.2文本居中对齐1.3图片居中对齐1.4使用定位方式实现左右... 查看详情