Node.js与前端开发 | 青训营笔记

73 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第13天

前言

也许在日常前端开发中并不经常用到Node,那为什么还要学习呢?其实并不是说一定要学习node,而是为了职场更好的发展,尤其是为了学习更高级的编程思维,学习node很有必要。

为什么学习Node.js

  1. Node.js最根本的能力是让js能够脱离浏览器运行,学好node,可以让自己不再是一个“纯前端”
  2. 学习nodejs是进行前端工程化的基础(NodeJS Stream)
  3. 学好node,可以编写服务端API,实现独立开发项目
  4. 作为中间层(位于服务器与客户端之间的应用层)

Node.js介绍

Node.jsJavaScript语言的服务器运行环境
用官方话来说就是:一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。
事件驱动:事件驱动就是当进来一个新的请求的时,请求将会被压入一个事件队列中,然后通过一个循环来检测队列中的事件状态变化,如果检测到有状态变化的事件,那么就执行该事件对应的处理代码,一般都是回调函数。
非阻塞异步: Node.js 采用了非阻塞型 I/O 机制,在做 I/O 操作的时候不会造成任何的阻塞,当完成之后,以时间的形式通知执行操作。

Node.js中的npm

npm(node package manager)是Node的包管理工具,能解决NodeJS代码部署上的很多问题npm里面有接近60万个别人已经写好的包。到目前为止,npm差不多收集了60万个别人写好的包,其实每个包就是一个功能,一个需求,npm里面有关于创建服务器的包,启动电脑摄像头的包,如果正好我们有这些需求,那么我们就没必要自己去写代码,完全可以用别人已经写好的包。

为什么用Node.js

javaScript语言本身是完善的函数式语言,在前端开发时,开发人员往往写得比较随意,让人感觉JavaScript就是个“玩具语言”。无法像其他编程语言一样满足工程的需要。
但是,在Node环境下,通过模块化的JavaScript代码,加上函数式编程,并且无需考虑浏览器兼容性问题,直接使用最新的ECMAScript 6标准,可以完全满足工程上的需求。

Node.js的应用场景

前端工程化

  • Bundle: webpack, vite, esbuild, parce
  • Uglify: uglifyjs
  • Transpile: bablejs, typescript
  • 其他语言加入竞争:esbuild,parcel, prisma
  • 现状:难以替代

Web服务端应用

  • 学习曲线平缓,开发效率较高
  • 运行效率接近常见的编译语言
  • 社区生态丰富及工具链成熟 (npm,V8 inspector)
  • 与前端结合的场景会有优势(SSR)
  • 现状: 竞争激烈,Node.js 有自己独特的优势

Electron跨端桌面应用

  • 商业应用: vscode,slack,discord,zoom
  • 大型公司内的效率工具
  • 现状:大部分场景在选型时,都值得考虑

Node.js运行时的结构

image.png

  • V8:JavaScript Runtime,诊断调试工具(inspector)
  • libuv: eventloop(事件循环),syscall (系统调用)
  • 举例: 用 node-fetch 发起请求时