1 Node.js是什么
官方对Node.js的定义:
Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境
Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine
也就是说Node.js基于V8引擎来执行JavaScript的代码,但是不仅仅只有V8引擎:
V8可以嵌入到任何C++应用程序中,事实上都是嵌入了V8引擎来执行JavaScript代码
在谷歌浏览器中,需要 解析 渲染HTML CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API 浏览器自己的事件循环等
另外在Node.js中我们也需要进行一些额外的操作 如 文件系统读/写 网络I/O 加密 压缩解压文件等操作.
浏览器和Node.js架构区别
Node.js架构
2 Node.js的应用场景
对于高级前端工程师来说,Node.js是必不可少的技能
应用一:目前 前端开发的库都是以node包的形式进行管理的;
应用二:npm yarn pnpm 工具成为前端开发使用最多的工具
应用三:越来越多的公司 使用Node.js作为web服务器开发 中间件 代理服务器
应用四:大量项目需要借助Node.js完成前后端渲染的同框应用
应用五:资深前端工程师需要为项目编写脚本工具(前端工程师写脚本经常会使用JavaScript而不是python或shell)
应用六:很多企业在使用Electron来开发桌面应用程序
3 Node的安装和管理
Node的安装
Node.js是在2009年诞生
LTS版:(长期支持)相对稳定一些,推荐线上环境使用该版本
Current版:最新Node版本,包含很多新特性
Node的版本工具
想要电脑存有多个版本的Node可以用另外一个工具来管理版本. n(TJ写的)/nvm (不支持window)
Window怎么办?
针对nvm 在github上有提供对应的window版本
通过nvm install latest安装最新的node版本
通过nvm list 展示目前安装的所有版本
通过nvm use 切换版本
4 Javascript代码执行
JavaScript console.log('aaa'); console.log('bbb'); console.log('ccc'); 操作=> 当前目录下 使用 node 文件名
Node输入和输出
JavaScript // 1 输出 console.log("Hello World") const num1 = 100 const num2 = 200 console.log(num1+num2); // 2 给程序输入内容 console.log(process.argv) // 在控制台打印 node .\文件名 num1=20 num2=40
Node程序传递参数
正常情况下执行一个node程序,直接跟上我们对应的文件即可: node index.js
但是在某些情况下执行node程序的过程中,我们希望能给node传递一些参数 node index.js env=development coderwhy
如果我们这样来使用程序 ,我们就需要在程序中获取到传递的参数
获取参数其实可以在process的内置对象中的
如果直接打印这个内置对象 里面包含了特别的信息 => 比如 版本 操作系统 等大家可以自行查看
现在我们先找到其中的argv属性:
可以发现他是一个数组,里面包含了我们需要的参数
5 Node的输入和输出
Node的输出
console.log => 最常用的输入内容的方式: console.log
console.clear => 清空控制台 console.clear
console.trace => 打印函数的调用栈
6 Node的全局对象
常见的全局对象
Node中给我们提供了一些全局对象 方便进行操作.
process对象:process提供了Node进程中相关的信息==> Node的运行环境 参数信息等
定时器函数:在Node中使用定时器有好几种方式:
setTimeout(callback,delay[,...args]):callback在delay毫秒后执行
setInterval(callback,delay[,...args]):callback每delay毫秒重复执行一次
setImmediate(callback[,...args]):callback I./O事件后的回调的"立即执行"
process.nextTick(callback[,...args]):添加到下一次tick队列中
特殊的全局对象
为什么称为特殊的全局对象?
这些全局对象实际上是 模块中的变量 只是 每个模块都有,看来像是全局变量;
在命令行交互中是不可以使用的; 包括:__dirname __filename exports module require()
__dirname => 获取当前文件所在的路径:
__filename => 获取当前文件所在的路径和文件名称
global对象
我们之前讲过:在新的标准中还有一个globalThis 也是指向全局对象的;类似于浏览器中window
面试题:global和window的区别
在浏览器中 全局变量都是在window上的,如 document setInterval setTimeout等等
在Node中也有一个global属性 并且看起来它里面有很多其他对象
但是在浏览器中执行Javascript代码,如果我们在顶级范围内通过var定义的一个属性 默认会被添加到window对象上,但是在Node中 通过var定义一个变量 他只会在当前模块中的变量 不会放到全局中