邂逅Node.js | 青训营笔记

104 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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.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环境,我们可以在其中演练简单的代码

171112.png

Node程序传递参数

  • 在某些情况下我么可以在执行node程序的过程中给node传递一些参数
node index.js env=development coderwhy
  • 在程序中获取到传递的参数

    • 获取参数其实是在process的内置对象中的
    • 如果我们直接打印这个内置对象,他里面包含特别的信息
  • 找到其中的argv属性:

    • 是一个包含我们所需信息的数组

172456.png

特殊的全局对象

  • 这些全局变量实际上是模块中的变量,只是每个模块都有,看来像是全局变量
  • 在命令行交互中不能使用
  • 包括: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一个变量,不会加入到全局