Node.js<一>——邂逅Node和REPL使用

913 阅读3分钟

简介

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

浏览器内核

事实上,我们经常说的浏览器内核指的是浏览器的排版引擎

排版引擎,也称为浏览器引擎、页面渲染引擎或样板引擎

渲染引擎工作的过程

HTML解析的过程中如果遇到了script标签,那么浏览器就会停止解析HTML,转而去加载和执行JavaScript代码

那么,为什么不去直接异步加载执行JavaScript代码,而非要停止HTML的解析呢?

因为JavaScript代码可以操作我们的DOM,浏览器希望将HTML解析的DOM和JavaScript操作之后的DOM放到一起来生成最终的DOM树,而不是频繁的去生成新的DOM

JavaScript引擎

为什么需要JavaScript引擎呢?

  • 事实上我们编写的JavaScript代码无论是交给浏览器还是Node去执行,最终都是需要被CPU处理的
  • 但是CPU只认识机器语言,所以我们需要JavaScript引擎帮助我们将JavaScript代码先翻译成汇编语言,然后再翻译成机器语言之后才能执行

JS引擎和浏览器内核的关系

这里我们先以Webkit为例,Webkit事实上由两部分组成

  • WebCore:负责HTML解析、布局、渲染等等相关的工作
  • JavaScriptCore:解析、执行JavaScript代码,微信小程序中的JS代码用的就是JsCore来执行的

V8引擎

  • V8是用C++编写的Google开源高性能的JavaScriptWebAssembly引擎,它用于ChromeNode.js
  • V8引擎是跨平台的
  • V8可以独立运行,也可以嵌入到任何C++应用程序中

Node.js是什么?

也就是说Node.js是基于V8引擎来执行JavaScript代码的,但是其不仅仅只有V8引擎

  • 无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行JavaScript代码的
  • 但是在Chrome浏览器中,还需要有解析、渲染HTML、CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API、浏览器自己的事件循环等
  • 另外,在Node.js中我们也需要一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作

浏览器和Node.js架构的区别

Node.js架构

Node.js并不是单纯的由js来进行编写的,其不同的模块用到了不同的语言,比如V8引擎是用C++编写的,Node对应的一些API又是用JS来编写的,LIBUV这个库是由C语言来编写的,所以不能单纯的说Node是由某一种语言来编写出来的

Node.js的应用场景

  • 目前前端开发的库都是以node包的形式进行管理的
  • npm(安装node的时候会自动安装npm)、yarn工具成为前端开发使用最多的工具
  • 越来越多的公司使用Node.js作为服务器开发
  • 大量项目需要借助Node.js完成前后端渲染的同构引用
  • 资深前端工程师需要为项目编写脚本工具
  • 很多企业在使用Electron来开发桌面应用程序(比如Vscode,其基于Node.jsChromium

Node的版本工具(以下工具Mac才支持,Windows是不支持的,但支持nvm-window)

  1. 安装n:直接使用npm安装即可
  • npm install -g n
  1. 安装最新的lts版本
  • 前面添加的sudo是权限问题
  • 可以同时安装多个版本,之后我们可以通过n快速在两个版本之间来回切换
    • n lts(安装最新的lts版本)
    • n latest (安装最新的版本)

Node的REPL

什么是REPL呢?

  • REPL是Read-Eval-Print Loop的简称,翻译为“读取-求值-输出”循环
  • REPL是一个简单的、交互式的编程环境

其实你在浏览器的控制台或者是开启了node环境下的命令行中编写代码都算是REPL