当前位置: 首页 > news >正文

了解Node开发基础知识

目录

  • 定义
  • 架构
  • 应用场景
  • 安装
  • 版本工具
  • 代码执行
  • REPL
  • 传递参数
  • 输出
  • 全局对象

定义

Node.js 是一个基于 V8 JavaScript 引擎构建的运行时环境,允许你在服务器端运行 JavaScript 代码。Node.js 允许开发者使用 JavaScript 编写服务器端代码,实现前后端代码的统一,大大简化了全栈开发的流程,现在已经成为全栈开发中非常流行的一部分

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

  • 我们知道V8可以嵌⼊到任何C++应⽤程序中,无论是Chrome还是Node.js,事实上都是嵌⼊了V8引擎来执⾏JavaScript代码

  • 但是在Chrome浏览器中,还需要解析、渲染HTMLCSS等相关渲染引擎,另外还需要提供⽀持浏览器操作的API、浏览器⾃ ⼰的事件循环等

  • Node.js中我们也需要进行⼀些额外的操作,⽐如⽂件系统读/写、⽹络IO、加密、压缩解压⽂件等操作

架构

我们看下浏览器架构和Node架构的区别:

在这里插入图片描述

我们编写的JavaScript代码会经过V8引擎,再通过Node.jsBindings,将任务放到Libuv的事件循环中
libuvUnicorn Velociraptor—独角伶盗龙)是使用C语言编写的库,提供了事件循环、文件系统读写、网络IO、线程池等等内容

在这里插入图片描述

应用场景

  • 应用一:目前前端开发的库都是以node包的形式进行管理

  • 应用二:npm、yarn、pnpm工具成为前端开发使用最多的工具

  • 应用三:越来越多的公司使用Node.js作为web服务器开发、中间件、代理服务器

  • 应用四:大量项目需要借助Node.js完成前后端渲染的同构应用

  • 应用五:资深前端工程师需要为项目编写脚本工具(前端工程师编写脚本通常会使用JavaScript,而不是Python或者shell

  • 应用六:很多企业在使用Electron来开发桌面应用程序

安装

Node.js是在2009年诞生的,目前最新的版本是分别是LTS v20.17.0以及Current v22.9.0

  • LTS版本:(Long-term support, 长期支持)相对稳定一些,推荐线上环境使用该版本
  • Current版本:最新的Node版本,包含很多新特性,平常学习使用可以选择current版本

Node的安装方式有很多:

  • 可以借助于一些操作系统上的软件管理工具,比如Mac上的homebrew,Linux上的yum、dnf
  • 可以官网直接下载对应的安装包
    • window选择.msi安装包,Mac选择.pkg安装包,Linux会在后续部署中讲解

    • 安装过程中会配置环境变量(让我们可以在命令行使用)

    • 并且会安装npm(Node Package Manager)工具

版本工具

如果你希望可以快速更新或切换node多个版本时,可以借助于一些工具:下面两个工具都不支持window

  • nvm:Node Version Manager
  • n:Interactively Manage Your Node.js Versions(交互式管理你的Node.js版本)

针对nvm,在GitHub上有提供对应的window版本:https://github.com/coreybutler/nvm-windows

  • nvm install latest 安装最新的node版本

  • nvm list 展示目前安装的所有版本

  • nvm use 切换版本

n的使用:使用时前面添加的sudo是因为权限问题

  • npm i -g n:直接使用npm安装即可

  • n --version:安装成功会显示版本

  • n lts:安装最新nodelts版本

  • n latest:安装node最新版本

  • n:查看你安装的所有版本

  • n i versionversion替换成你要安装的node版本,就会安装这个版本

  • n use versionversion替换成你要使用的node版本,就会使用这个版本

代码执行

我们编写一个js文件,里面存放JavaScript代码,目前我们知道有两种方式可以执行

  • 将代码交给浏览器执行:
    • 需要通过让浏览器加载、解析html代码,所以我们需要创建一个html文件

    • html中通过script标签,引入js文件

    • 当浏览器遇到script标签时,就会根据src加载、执行JavaScript代码

  • 将代码载入到node环境中执行:进入到文件所在目录,使用命令行node 文件名就可以执行,tab键可以补全文件名
    • 首先电脑上需要安装Node.js环境,安装过程中会自动配置环境变量

    • 可以通过终端命令node js文件名的方式来载入和执行对应的js文件

REPL

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

  • 事实上,我们浏览器的console就可以看成一个REPL
  • Node也给我们提供了一个REPL环境,我们可以在其中演练简单的代码

在这里插入图片描述

传递参数

正常情况下执行一个node程序,直接跟上我们对应的文件即可:node node.js

但在某些情况下执行node程序的过程中,我们可能希望给node传递一些参数:node node.js env=development 30 40

  • 获取参数其实是在process的内置对象中,它包含版本、操作系统等,而我们的参数在argv中,它是一个数组,我们来看下面练习代码:
// node.js文件
function add(num1, num2) {return num1 + num2;
}
console.log("add函数结果:", add(10, 20));
console.log("process.argv:", process.argv);

argv打印结果如下:

在这里插入图片描述

为什么叫argv呢?

  • argcargument counter的缩写,传递参数的个数
  • argvargument vector(向量、矢量)的缩写,传入的具体参数
    • vector翻译过来是矢量的意思,在程序中表示的是一种数据结构
    • C++、Java中都有这种数据结构,是一种数组结构
    • JavaScript中也是一个数组,里面存储一些参数信息

输出

  • console.log:最常用的输入内容的方式

  • console.clear:清空控制台

  • console.trace:打印函数的调用栈

  • 还有一些其他的console方法:https://nodejs.org/dist/latest-v16.x/docs/api/console.html

全局对象

Node中给我们提供了⼀些全局对象,⽅便我们进行⼀些操作:某些全局对象并不常⽤,某些我们深入学习node的时候再去理解

  • 特殊的全局对象:这些全局对象实际上是模块中的变量,只是每个模块都有,看来像是全局变量,包括:__dirname、__filename、exports、module、require()

    • __dirname:获取当前⽂件所在的路径,不包括后⾯的⽂件名

    • __filename:获取当前⽂件所在的路径和⽂件名称,包括后⾯的⽂件名称

    • 后面三个在模块化中讲解具体学习这篇文章:待后面补充
      在这里插入图片描述

  • 常见的全局对象

    • process对象process提供了Node进程中相关的信息

      ⽐如Node的运⾏环境、参数信息等;
      后⾯在项⽬中,会学习如何将⼀些环境变量读取到 processenv
      在这里插入图片描述

    • console对象:提供了简单的调试控制台

    • 定时器函数:在Node中使⽤定时器有好⼏种⽅式

      setTimeout(callback, delay, args)callbackdelay毫秒后执⾏⼀次

      setInterval(callback, delay, args):callback每delay毫秒重复执⾏⼀次

      setImmediate(callback, args):callback I/O事件后的回调的“⽴即”执⾏,后面事件循环中具体讲解

      process.nextTick(callback, args):添加到下⼀次tick队列中,后面事件循环中具体讲解

    • global对象:事实上前面的process、console、setTimeout等都有被放到global

      在新的标准中还有⼀个globalThis因为在浏览器中全局对象是window,在node中全局对象是global,所以在新的标准中就统一了一个globalThis
      在这里插入图片描述

      在浏览器中执⾏的JavaScript代码,如果我们在顶级范围内通过var定义的⼀个属性,默认会被添加到window对象上

      但是在node中,我们通过var定义⼀个变量,它只是在当前模块中有⼀个变量,不会放到全局中

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python--TCP/UDP通信
  • 使用gitee如何回滚上一个版本,简单操作方式-gitee自带功能无需使用代码
  • P9235 [蓝桥杯 2023 省 A] 网络稳定性
  • 【动态规划】下降路径最小和 C++
  • 互联网全景消息(5)之RocketMq快速入门(下)
  • DHCP协议原理(网络协议)
  • Appium高级话题:混合应用与原生应用测试策略
  • js中箭头函数与普通函数的区别
  • idea 恢复 pom 文件呈现灰色并带删除线
  • 将Java程序打包成EXE程序
  • 【云原生安全篇】一文掌握Harbor集成Trivy应用实践
  • 重头开始嵌入式第四十一天(数据结构 树 哈希表)
  • 【图像拼接】基于SIFT/SURF特征算法的图像拼接,matlab实现
  • 图分类!!!
  • Linux——应用层自定义协议与序列化
  • 【个人向】《HTTP图解》阅后小结
  • 2019年如何成为全栈工程师?
  • 230. Kth Smallest Element in a BST
  • co.js - 让异步代码同步化
  • Electron入门介绍
  • fetch 从初识到应用
  • java小心机(3)| 浅析finalize()
  • React 快速上手 - 07 前端路由 react-router
  • React+TypeScript入门
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 聊聊directory traversal attack
  • 系统认识JavaScript正则表达式
  • 消息队列系列二(IOT中消息队列的应用)
  • 新版博客前端前瞻
  • 原生 js 实现移动端 Touch 滑动反弹
  • 【云吞铺子】性能抖动剖析(二)
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 数据库巡检项
  • ​configparser --- 配置文件解析器​
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Apache SeaTunnel 究竟是什么?
  • # dbt source dbt source freshness命令详解
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 数据结构
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #### golang中【堆】的使用及底层 ####
  • #pragma预处理命令
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (南京观海微电子)——示波器使用介绍
  • (七)Java对象在Hibernate持久化层的状态
  • (实战篇)如何缓存数据
  • (四)Linux Shell编程——输入输出重定向
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)appium-desktop定位元素原理
  • (转)大型网站的系统架构