了解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定义⼀个变量,它只是在当前模块中有⼀个变量,不会放到全局中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1540003.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Windows【环境 01】服务器系统重装后的服务恢复(ES\Redis\Jafka\Tomcat)环境变量和服务注册

服务器系统重装后的服务恢复 1.原因2.问题处理2.1 JDK2.2 Elasticsearch2.3 Redis2.4 Jafka2.5 Tomcat 3.总结 1.原因 Windows 服务器系统盘损坏,换了硬盘并重做了系统,其他磁盘未损坏但安装的服务无法正常运行了,包括: Elastic…

2.计算机网络基础

2. 计算机网络基础 (1) 计算机网络的定义 计算机网络是指将地理位置不同、具有独立功能的多个计算机系统通过通信线路和设备连接起来,以功能完善的网络软件实现网络中资源共享的系统。最简单的定义是:计算机网络是一些互相连接的、自治的计算机系统的集合。最庞大的计算机网…

JAVA-期末成绩计算

要求 总评成绩 期末成绩*0.6 平时成绩*0.4 输入总评成绩和平时成绩&#xff0c;输出期末成绩要考几分&#xff08;0<平时成绩<40&#xff0c;0<总评成绩<100&#xff09; 要求能多次运行&#xff08;退出程序停止&#xff09; 代码 import java.util.Scanne…

db2恢复数据库

db2licm -l检查下license IBM Support: Fix Central - Please wait, Select fixes db2 force application all db2ckbkp -H JYC.0.DB2.NODE0000.CATN0000.20240603223001.001 db2 "restore db jyc logtarget x:\db2\log" db2 "rollforward db jyc to end of log…

前端vue-复选框或者是下拉框的选择

单选框以及复选框还是下拉框都和name的值没有关系&#xff0c;但是他们之间得写&#xff0c;data中要写标签内v-model的值&#xff0c;在data中这个v-model绑定的值的值是value中的其中一个值或者是多个值&#xff0c;是默认选中的状态。

C++之深拷贝和浅拷贝*

两者本质&#xff1a; 浅拷贝&#xff1a;简单的赋值拷贝操作 深拷贝&#xff1a;在堆区中重新申请空间&#xff0c;进行拷贝操作new & delete 注意事项&#xff1a;堆区是在地址中重新申请空间&#xff0c;所以后续一系列操作new delete是通过指针* age进行操作&#xff0…

委托的注册和注销

让我们来回顾一下委托的内容。 委托 是一种复杂的数据类型&#xff0c;需要我们先定义出来。当定义好类型后&#xff0c;声明委托变量来使用。 可以装载方法&#xff0c;只可以装载具有相同返回类型和参数列表的方法。 委托变量名&#xff08;参数列表&#xff09;&#xf…

进击J7:对于ResNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 本周任务是自行探索解决问题&#xff0c;通过此次思考过程逐渐将知识层面的学习过渡到能力层面的培养上。 一、任务 &#x1f4cc; **你需要解决的疑问&…

Zend Studio 13.6.1汉化中文版

在线汉化地址 https://download.eclipse.org/technology/babel/update-site/R0.16.1/2018-12/ 后面一直Next&#xff0c;最后让它后台自动安装 汉化完成 &#xff01;其实还是习惯用英文版&#xff01;&#xff01;&#xff01;&#xff01;&#x1f600;

Tableau Einstein 重磅亮相,融合 AI 与数据云提供统一且无缝的分析新体验!

通过内置可重复使用和可扩展的组件、语义 AI 和统一的数据&#xff0c;来加速不同部门和领域的用户工作流程。 近日&#xff0c;为期三天的 Dreamforce 2024 年度大会&#xff08;下文简称 DF24&#xff09;在美国旧金山隆重举行。 其中&#xff0c;最受关注的莫过于 Salesfor…

动态路由---OSPF协议基础

一、动态路由 1.1、定义 动态路由是指在网络通信过程中&#xff0c;路由器根据当前网络的状态和拓扑结构等信息&#xff0c;动态计算出最优的数据传输路径。这一过程依赖于路由器之间的路由信息交换和路由表的维护。当网络拓扑结构发生变化时&#xff0c;如链路故障或节点增减…

.NET 一直跻身 30 大Github最活跃开源项目之列。

大家好&#xff0c;我是编程乐趣。 一直以来都在介绍.Net的热门开源项目&#xff0c;今天来说说.Net本身。 .Net在GitHub上也是一个开源项目&#xff0c;.NET 是一个由 Microsoft 和 .NET 社区共同维护的开源跨平台框架。 自 2017 年以来&#xff0c;.NET 一直是 GitHub 上最…

Debian 12上安装google chrome

当前系统&#xff1a;Debian 12.7 昨天在Debian 12.7上安装Google Chrome时&#xff0c;可能由于网络原因&#xff0c;导入公钥始终失败。 导致无法正常使用命令#apt install google-chrome-stable来安装google chrome; 解决办法&#xff1a; Step1.下载当前google chrome稳…

【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯&#xff0c;你们的点赞收藏是我前进最大的动力&#xff01;&#xff01;7000字长文&#xff0c;希望本文内容能够帮助到你&#xff01; 目录 一&#xff1a;创建线程五种方式 方式一&#xff1a;继承Thread类&#xff0c;…

需求2:新加字段

从今天开始&#xff0c;我想把我之前写的一些小的&#xff0c;简单的需求都通过文章的方式写出来&#xff0c;一方面是回顾梳理之前所学的知识&#xff0c;另一方面也是为了方便以后回看&#xff0c;好记性不如烂笔头。 现在的问题是这样的&#xff1a; 涛哥希望&#xff0c;加…

电脑技巧:Win11家庭版和专业版之间的区别详解

目录 一、操作系统安装层面 二、 操作系统安全层面 三、虚拟化和远程功能方面 四、硬件支持方面 五、企业管理方面 六、价格方面 七、软件功能方面 八、适合人群方面 九、如何选择 Windows 11操作系统提供了多个的版本(SKU),包括适合家庭用户的家庭版、适合专业人士…

C++刷怪笼(5)内存管理

一.前言 学习完类和对象之后&#xff0c;我们对C有了基本的了解&#xff0c;但是我们对于C的学习&#xff0c;除了广度&#xff0c;还需要深度&#xff0c;今天让我们走进底层&#xff0c;看看C对其内存是如何进行管理的。 二.正文 我们对这段代码进行详细的分析如下图&#…

微信支付开发-支付工厂H5产品代码

一、H5支付产品、Native支付产品 二、工厂父类抽象类代码开发 <?php /*** 微信父类抽象类* User: 龙哥三年风水* Date: 2024/9/19* Time: 11:33*/ namespace Payment\WechatPay; abstract class WechatPaymentHandle {/*** 下单* User: 龙哥三年风水* Date: 2024/9/19* Ti…

ByteTrack多目标跟踪流程图

ByteTrack多目标跟踪流程图 点个赞吧&#xff0c;谢谢。

Windows安全日志分析(事件ID详解)

目录 如何查看Windows安全日志 常见事件ID列表 事件ID 1116 - 防病毒软件检测到恶意软件 事件ID 4624 - 账户登录成功 事件ID 4625 - 账户登录失败 事件ID 4672 - 为新登录分配特殊权限 事件ID 4688 - 新进程创建 事件ID 4689 - 进程终止 事件ID 4720 - 用户账户创建 …