这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
1.Node.js是什么?
-
官方对Node.js的定义:
- node.js是一个基于v8 JavaScript引擎的JavaScript运行时环境
-
也就是说Node.js是基于v8引擎来执行js的代码,带是不仅仅只有v8引擎
- 在Node.js中我们也需要进行一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作
Node.js架构
- libuv是使用C语言编写的库;
- libuv提供了事件循环、文件系统读写、网络IO。线程池等等内容;
Node.js应用场景
- 应用一:目前前端开发的库,都是以node包的形式进行管理
- 应用二:npm、yarn、pnpm等工具成为前端开发使用最多的工具
- 应用三:越来越多的公司使用Node.js作为web服务器开发、中间件、代理服务器;
- 应用四:大量项目需要借助Node.js完成前后端渲染的同构应用;
- 应用五:资深前端工程师需要为项目边写脚本工具(通常会使用js)
- 应用六:很多企业会使用electron来开发桌面应用程序
Node的REPL
-
什么是REPL呢?
- REPL是Read-Eval-Print Loop的简称,翻译为“读取-求值-输出”循环
- REPL是一个简单的交互式的编程环境
-
事实上,浏览器的console就可以看做一个REPL
-
Node也给我们提供了一个REPL环境,我们可以在其中演练简单的代码
Node程序传递参数
- 在某些情况下我么可以在执行node程序的过程中给node传递一些参数
node index.js env=development coderwhy
-
在程序中获取到传递的参数
- 获取参数其实是在process的内置对象中的
- 如果我们直接打印这个内置对象,他里面包含特别的信息
-
找到其中的argv属性:
- 是一个包含我们所需信息的数组
特殊的全局对象
- 这些全局变量实际上是模块中的变量,只是每个模块都有,看来像是全局变量
- 在命令行交互中不能使用
- 包括:dirname、 filename、exports、module、reqiure()
- __dirname:获取当前文件的路径(不包括文件名)
- __filename:获取当前文件的路径和文件
常见的全局对象
-
process对象: process提供了Node进程中的相关信息
- 比如Node的运行环境、参数信息等;
-
console对选哪个
-
定时器函数
- setTimeout(callback, delay[, ...args]):callback在delay毫秒后执行一次;
-
setInterval(callback, delay[, ...args]):callback每delay毫秒重复执行一次;
-
setImmediate(callback[, ...args]):callbackI / O事件后的回调的“立即”执行;
-
process.nextTick(callback[, ...args]):添加到下一次tick队列中;
global对象
- global是一个全局对象,事实上process、console、setTimeout等都又被放到global中
- 在浏览器中全局变量都是在window上的,比如document、setTimeout、alert、console等等
- 在浏览器中执行的Js代码中我们var一个变量默认会被添加到window对象上
- 但是在node中var一个变量,不会加入到全局