了解Node开发基础知识

news2024/9/20 12:23:16

目录

  • 定义
  • 架构
  • 应用场景
  • 安装
  • 版本工具
  • 代码执行
  • 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.coloradmin.cn/o/2148877.html

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

相关文章

安全帽识别算法、安全帽智能识别、不戴安全帽检测算法

不戴安全帽检测算法是一种基于人工智能技术,用于实时监测和提醒工作人员是否正确佩戴安全帽的系统。以下是对不戴安全帽检测算法的详细介绍: 1. 技术原理 - 数据采集与预处理:通过安装在施工现场或工厂车间等场所的摄像头收集图像数据&#…

HTML 盒子标签、字符实体及废弃标签介绍

目录 HTML盒子标签 div标签 span标签 字符实体 HTML注释 HTML 废弃标签介绍 关注作者微信公众号,开启探索更多 HTML 知识的精彩之旅。在这里,你将收获丰富的 HTML 专业内容,深入了解这一网页开发语言的奥秘,不断拓展你的知识…

c语言面试字符串复制

1&#xff0c;下面这个函数的打印是什么&#xff1a; #include<stdio.h> #include<string.h>int main() {char str0[5], str1[] "welcome";strcpy(str0, str1);printf("str0:%s\r\n",str0);printf("str1:%s\r\n",str1); } larkla…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21

根据状态转移表实现时序电路 描述 某同步时序电路转换表如下&#xff0c;请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 电路的接口如下图所示。 输入描述&#xff1a; input A , input clk , …

uniapp+renderJS+google map开发安卓版APP非小程序

背景需求 需要在uniapp中接入google地图,研究了一番,都没有找到合适的,现在说一下教程。 效果图 前期工作 这两点缺一不可,否则你啥也看不到。 1、电脑安装L-O-U梯 用于访问G-OO-G-LE的API或者创建google map key。 2、手机安装L-O-U梯 用于显示google地图。我就是手…

SpringCloud从零开始简单搭建 - JDK17

文章目录 SpringCloud Nacos从零开始简单搭建 - JDK17一、创建父项目二、创建子项目三、集成Nacos四、集成nacos配置中心 SpringCloud Nacos从零开始简单搭建 - JDK17 环境要求&#xff1a;JDK17、Spring Boot3、maven。 那么&#xff0c;如何从零开始搭建一个 SpringCloud …

DNS攻击频发,打造防劫持DNS需强化“数据治理”理念

数字化转型时代&#xff0c;“一物多址&#xff0c;万物互联”正依托于DNS&#xff08;域名系统&#xff09;实现&#xff0c;DNS的重要性不言而喻。然而传统DNS协议存在诸多安全隐患&#xff0c;整个明文传输过程几乎没有认证与保护&#xff0c;导致DNS报文易被篡改&#xff0…

VSCode调试Unity准备工作

一.Unity设置VSCode为默认编辑器 Unity编辑器中Edit-Preferences-External Tools中选择VSCode 二.VSCode安装Unity插件 三.Unity的Visual Studio Editor升至最新 Window->Package Manager->Visual Studio Editor 四.下载配置.Net 8.0 安装之前VSCode会提示你下载.Net …

maxwell 输出消息到 redis

文章目录 1、maxwell 输出消息到 redis1.1、启动一个Maxwell容器&#xff0c;它会连接到指定的MySQL数据库&#xff0c;捕获变更事件&#xff0c;并将这些事件以Redis发布/订阅的形式发送到指定的Redis服务器1.2、在已运行的 Redis 容器中执行 Redis 命令行界面&#xff08;CLI…

【2023工业异常检测文献】SimpleNet

SimpleNet:ASimpleNetworkforImageAnomalyDetectionandLocalization 1、Background 图像异常检测和定位主要任务是识别并定位图像中异常区域。 工业异常检测最大的难题在于异常样本少&#xff0c;一般采用无监督方法&#xff0c;在训练过程中只使用正常样本。 解决工业异常检…

【uni-app】小兔鲜项目-基础架构-请求和上传文件拦截器

注意事项 uni.request 请求封装 请求和上传文件拦截器 uniapp 拦截器&#xff1a; uni.addInterceptor 接口说明&#xff1a;接口文档 实现需求 拼接基础地址设置超时时间添加请求头标识添加 token 参考代码 // src/utils/http.ts// 请求基地址 const baseURL https://pca…

IM项目-----语音识别子服务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、搭建思想二、服务器搭建1.继承speechService类,重写业务代码2.编写语音识别服务器类3.建造者类编写 三.测试 前言 语音转换子服务&#xff0c;用于调用语音…

字节跳动算法岗面试亲历:高效流程大公开,通关诀窍全掌握

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 个人情况 985 本硕项目一个论文一篇无实习经历 时间节点 7.2 技术面一面 …

探索Python的聊天机器人世界:errbot库的神秘面纱

文章目录 探索Python的聊天机器人世界&#xff1a;errbot库的神秘面纱背景&#xff1a;为何选择errbot&#xff1f;errbot是什么&#xff1f;如何安装errbot&#xff1f;简单库函数使用方法1. 创建机器人2. 响应消息3. 处理私聊4. 定时任务5. 错误处理 场景应用1. 会议提醒2. 天…

sheng的学习笔记-AI-FOIL(First-Order Inductive Learner)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 规则学习&#xff08;rule learning&#xff09;: sheng的学习笔记-AI-规则学习&#xff08;rule learning&#xff09;-CSDN博客 序贯覆盖(sequential covering):sheng的学习笔记-AI-序贯覆盖(sequential covering) 基础…

Java 方法重写(难)

目录 1&#xff0e;A类和B类都写一个相同的方法&#xff0c;先用static&#xff0c;两边都是一样的&#xff1a; 2&#xff0e;A类和B类都去掉static&#xff0c;出现了两个圆圈的符号&#xff0c;代表重写&#xff1a; 3&#xff0e;总结 4&#xff0e;为什么需要重写&…

maven模块管理和继承聚合

1.分模块设计与开发 分模块即为不同的模块实现不同的功能&#xff0c;方便项目开发和部署。 如下图&#xff1a;pojo为实体模块&#xff0c;tlias为业务模块&#xff0c;utils为功能模块 要在tlias模块中使用其他两个模块&#xff0c;需要在pom文件中加入对应的依赖。 如图&…

【OceanBase诊断调优】—— obdiag 一条命令搞定卡合并问题根因分析

1. 背景 卡合并是一个OceanBase中较为复杂的问题&#xff0c;可能由各种问题引入导致。当前是否卡合并无明确定义&#xff0c;一方面我们认为超过36小时没合完是合并超时&#xff08;RS会报ERROR日志&#xff09;&#xff0c;另一方面用户可能自己判断合并超时&#xff08;根据…

探索AI大模型:从入门到精通的学习路径

每日一句正能量 其实许多波折不过是成功道上的荆棘路&#xff0c;纵然今天不如意&#xff0c;但我们还有未来。 前言 随着人工智能技术的快速发展&#xff0c;AI大模型学习正成为一项备受关注的研究领域。为了提高模型的准确性和效率&#xff0c;研究者们需要具备深厚的数学基…