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

初识Node.js开发

一、Node.js是什么

1.node.js是什么

官方对Node.js的定义:

Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。

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

前面我们知道V8可以嵌入到任何C ++应用程序中,无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行JavaScript代码;

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

另外,在Node.js中我们也需要进行一些额外的操作,比如文件系统读/写网络IO加密压缩解压文件等操作;

2.浏览器和Node.js架构的区别

我们可以简单理解规划出Node.js和浏览器的差异:

在这里插入图片描述

3.Node.js架构

我们来看一个单独的Node.js的架构图:

我们编写的JavaScript代码会经过V8引擎,再通过Node.js的Bindings,将任务放到Libuv的事件循环中;

  • libuv(Unicorn Velociraptor—独角伶盗龙)是使用C语言编写的库;
  • libuv提供了事件循环文件系统读写网络IO线程池等等内容;

在这里插入图片描述

4.Node.js的应用场景

Node.js的快速发展也让企业对Node.js技术越来越重视,在前端招聘中通常会对Node.js有一定的要求,特别对于高级前端开发工程师,Node.js更是必不可少的技能:

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

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

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

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

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

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

二、Node的安装

1.Node的安装

Node.js是在2009年诞生的,目前最新的版本是分别是LTS 16.15.1以及Current 18.4.0:

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

这些我们选择什么版本呢?

  • 如果你是学习使用,可以选择current版本;
  • 如果你是公司开发,建议选择LTS版本(面向工作,选择LTS版本);

Node的安装方式有很多:

  • 可以借助于一些操作系统上的软件管理工具,比如Mac上的homebrew,Linux上的yum、dnf等;
  • 也可以直接下载对应的安装包下载安装;

我们选择下载安装,下载自己操作系统的安装包直接安装就可以了:

  • window选择.msi安装包,Mac选择.pkg安装包,Linux会在后续部署中讲解;
  • 安装过程中会配置环境变量(让我们可以在命令行使用);
  • 并且会安装npm(Node Package Manager)工具;

2.Node版本管理工具

在实际开发学习中,我们只需要使用一个Node版本来开发或者学习即可。

但是,如果你希望通过可以快速更新或切换多个版本时,可以借助于一些工具:

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

问题:这两个工具都不支持window

Window的用户怎么办?

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

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

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

  • 通过 nvm use 切换版本

3.版本管理工具:n

安装n:直接使用npm安装即可

# 安装工具n
npm install -g n
# 查看n的版本
n --version

安装最新的lts版本:

  • 前面添加的sudo是权限问题;
  • 可以两个版本都安装,之后我们可以通过n快速在两个版本间切换;
# 安装lts版本
n lts
# 安装最新版本
n latest

三、JavaScript代码运行

1.JavaScript代码运行

如果我们编写一个js文件,里面存放JavaScript代码,如何来执行它呢?

目前我们知道有两种方式可以执行:

  • 将代码交给浏览器执行;
  • 将代码载入到node环境中执行;

如果我们希望把代码交给浏览器执行:

需要通过让浏览器加载、解析html代码,所以我们需要创建一个html文件;

  • 在html中通过script标签,引入js文件;
  • 当浏览器遇到script标签时,就会根据src加载、执行JavaScript代码;

如果我们希望把js文件交给node执行:

  • 首先电脑上需要安装Node.js环境,安装过程中会自动配置环境变量
  • 可以通过终端命令node js文件的方式来载入和执行对应的js文件;

2.Node的REPL

什么是REPL呢?感觉挺高大上

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

事实上,我们浏览器的console就可以看成一个REPL。

Node也给我们提供了一个REPL环境,我们可以在其中演练简单的代码。

在这里插入图片描述

四、Node的输入和输出

1.Node程序传递参数

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

node index.js

但是,在某些情况下执行node程序的过程中,我们可能希望给node传递一些参数:

node index.js env=dev abc

如果我们这样来使用程序,就意味着我们需要在程序中获取到传递的参数

  • 获取参数其实是在process的内置对象中的;
  • 如果我们直接打印这个内置对象,它里面包含特别多的信息:
    • 其他的一些信息,比如版本、操作系统等大家可以自行查看,后面用到一些其他的我们还会提到;

现在,我们先找到其中的argv属性:

  • 我们发现它是一个数组,里面包含了我们需要的参数;
// 2.给程序输入内容
// node ./webpack.config.js env=development
const arg1 = process.argv[2]
const arg2 = process.argv[3]console.log(arg1, arg2)setTimeout(() => {// console.clear()console.trace()
}, 3000);

2.为什么叫argv呢?

你可能有个疑问,为什么叫argv呢?

在C/C++程序中的main函数中,实际上可以获取到两个参数:

  • argc:argument counter的缩写,传递参数的个数;
  • argv:argument vector(向量、矢量)的缩写,传入的具体参数。

vector翻译过来是矢量的意思,在程序中表示的是一种数据结构

在C++、Java中都有这种数据结构,是一种数组结构

在JavaScript中也是一个数组,里面存储一些参数信息;

我们可以在代码中,将这些参数信息遍历出来,使用:

const args = process.argv
for (const arg of args) {console.log(arg)
}

3.Node的输出

console.log

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

console.clear

  • 清空控制台:console.clear

console.trace

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

还有一些其他的方法,其他的一些console方法,可以自己在下面学习研究一下。

  • https://nodejs.org/dist/latest-v16.x/docs/api/console.html

五、常见的全局对象

1.常见的全局对象

Node中给我们提供了一些全局对象,方便我们进行一些操作:

  • 这些全局对象,我们并不需要从一开始全部一个个学习;
  • 某些全局对象并不常用
  • 某些全局对象我们会在后续学习中讲到;
    • 比如module、exports、require()会在模块化中讲到;
    • 比如Buffer后续会专门讲到;

在这里插入图片描述

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

  • 比如Node的运行环境、参数信息等;
  • 后面在项目中,我也会讲解,如何将一些环境变量读取到 process 的 env 中;

console对象:提供了简单的调试控制台,在前面讲解输入内容时已经学习过了。

  • 更加详细的查看官网文档:https://nodejs.org/api/console.html

定时器函数:在Node中使用定时器有几种方式:

  • setTimeout(callback, delay[, …args]):callback在delay毫秒后执行一次;
  • setInterval(callback, delay[, …args]):callback每delay毫秒重复执行一次;
  • setImmediate(callback[, …args]):callback I / O事件后的回调的“立即”执行;
    • 这里先不展开讨论它和setTimeout(callback, 0)之间的区别;
    • 因为它涉及到事件循环的阶段问题,我会在后续详细讲解事件循环相关的知识;

process.nextTick(callback[, …args]):添加到下一次tick队列中;

  • 具体的讲解,也放到事件循环中说明;

2.global对象

global是一个全局对象,事实上前端我们提到的process、console、setTimeout等都有被放到global中:

我们之前讲过:在新的标准中还有一个globalThis,也是指向全局对象的;

类似于浏览器中的window

console.log(global === globalThis)// true

3.global和window的区别

在浏览器中,全局变量都是在window上的,比如有document、setInterval、setTimeout、alert、console等等

在Node中,我们也有一个global属性,并且看起来它里面有很多其他对象。

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

var foo = 111
console.log(window.foo)// 111

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

var foo = 111
console.log(window.foo)// undefined

3.特殊的全局对象

为什么我称之为特殊的全局对象呢?

  • 这些全局对象实际上是模块中的变量,只是每个模块都有,看来像是全局变量;
  • 在命令行交互中是不可以使用的;
  • 包括:__dirname、__filename、exports、module、require()

__dirname:获取当前文件所在的路径:

  • 注意:不包括后面的文件名

__filename:获取当前文件所在的路径和文件名称:

  • 注意:包括后面的文件名称
console.log("全局对象__dirname:" + __dirname)
// 全局对象__dirname:D:\disk\frontend\code\06JS_MODULE\01Nodejs
console.log("全局对象__filename:" + __filename)
// 全局对象__filename:D:\disk\frontend\code\06JS_MODULE\01Nodejs\03_全局对象.js

相关文章:

初识Node.js开发

一、Node.js是什么 1.node.js是什么 官方对Node.js的定义: Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。 也就是说Node.js基于V8引擎来执行JavaScript的代码,但是不仅仅只有V8引擎: 前面我们知道V8可以嵌入到任何C 应用…...

【Python入门教程】基于OpenCV视频分解成图片+图片组合成视频(视频抽帧组帧)

在人工智能爆火的今天,深度学习被广泛应用于各个领域。深度学习的模型训练离不开大量的样本库。我之前分享过【Python爬虫】批量爬取网页的图片&制作数据集,今天跟大家分享一下如何使用OpenCV库对视频进行抽帧,从而增加样本图片的数量。正…...

微前端qiankun接入Vue和React项目

主应用:Vue3Webpack 1、创建主应用: npx vue create main-vue3-app 2、安装qiankun npx yarn add qiankun 3、项目中使用的vue、vue-router、qiankun依赖如下,webpack版本为5.x 4、在根目录下创建vue.config.js const { defineConfig }…...

提升技能,一触即达!全新在线题库微信小程序等你来挑战!

亲爱的同学们,你是否在准备各种专业认证考试时,感到题目繁多,复习困难?你是否在寻找一个能够提供全方位、各级别认证考试题库的在线学习平台? 今天,我们为你带来了一款全新的在线题库微信小程序——KD蝌蚪阿…...

语雀P0级故障复盘,有9个字亮了

大家好,我是洋子 最近语雀不是出了个号称 “载入史册” 的 P0 级事故嘛 —— 连续宕机接近8个小时无法使用,作为一个大厂知名产品,这个修复速度属实让人无法理解 故障公告原文:https://mp.weixin.qq.com/s/WFLLU8R4bmiqv6OGa-QMc…...

在 openresty 中使用 capnp lua 库

1. 安装必要的工具和库 apt-get install capnproto luarocksluarocks install lua-capnproto luarocks install lua-cjsonlua-cjson 库不是必须的,是由于后面的演示程序要使用,就一起装上了。 可以看下库的安装位置: root350983744ebf:~# …...

私藏小技巧:让微信朋友圈营销方便化的小窍门!

微信,这个拥有十亿用户的社交软件,已经成为生活中不可或缺的一部分。 而朋友圈,这个微信的基础功能,是聚宝盆,也是一切流量的尽头。 现在公域+私域的流量增长变现体系很火。朋友圈是一切公域流量的尽头&a…...

Centos使用tomcat部署jenkins

jenkins的最新版本已经不在支持jdk8,支持的jdk环境如下: 安装jdk环境 yum -y install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64安装tomcat tomcat官网 cd /optwget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat…...

uni-app打包apk实现自动更新

一、直接复制粘贴就可用(豪横) app.vue文件里写 //app.vue里写 <script>export default {onShow: function() {console.log(App Show)},onHide: function() {console.log(App Hide)},onLaunch: function() {let appVersion uni.getSystemInfo({success: function(e) {ap…...

SRS srs-bench

1 srs-bench 音视频压测工具&#xff0c;包括RTMP/FLV/WebRTC/GB28181等&#xff0c;未来还会完善。 SB(SRS Bench) is a set of benchmark and regression test tools, for SRS and other media servers, supports HTTP-FLV, RTMP, HLS, WebRTC and GB28181. For RTMP/HLS/F…...

HackTheBox-Starting Point--Tier 1---Appointment

文章目录 一 题目二 实验过程 一 题目 Tags Web、Databases、Injection、Apache、MariaDB、PHP、SQL、Reconnaissance、SQL Injection译文&#xff1a;Web、数据库、注入、Apache、MariaDB、PHP、SQL、侦察、SQL 注入Connect To attack the target machine, you must be on …...

【工具】Java请求带http重定向的地址 自动进行重定向

【工具】Java请求带http重定向的地址 自动进行重定向 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;public class HTTPGETWithMultipleHeaders {public static voi…...

接口自动化测试方案

1、引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 V1.0 项目经理 XX 测试人员 XXXXX&#xff0c;XXX 所属部门 XX 备注 1.3 文档目的 本文档主要用于指导XXX-YY项目常用接口自动化测试…...

TikTok文化探索:热议时事与社会话题

在当今数字时代&#xff0c;社交媒体平台如TikTok已经成为了我们日常生活中不可或缺的一部分。它不仅仅是一个娱乐应用&#xff0c;也是一扇窥视世界、探讨时事和社会话题的窗户。本文将深入探讨TikTok如何成为文化探索的平台&#xff0c;热议时事和社会话题&#xff0c;以及它…...

springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作

第一步&#xff1a;在mongodb的官网里面创建云服务器 点进去 这是免费的&#xff0c;由于是一个项目只可以创建一个&#xff0c;这里我已经创建好了 用本地的mongodb服务也是可以的 第二步&#xff1a;点击connect,下载连接mongodb的软件&#xff1a;MongoDBCompass 第三步&am…...

QWEN technical report

通义千问-Qwen技术报告细节分享 - 知乎写在前面大家好&#xff0c;我是刘聪NLP。 阿里在很早前就开源了Qwen-7B模型&#xff0c;但不知道为什么又下架了。就在昨天阿里又开源了Qwen-14B模型&#xff08;原来的7B模型也放出来了&#xff09;&#xff0c;同时还放出了Qwen的技术报…...

提升MODBUS-RTU通信数据刷新速度的常用方法

SMART PLC的MODBUS-RTU通信请参考下面文章链接: 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客MODBUS通讯非常简单、应用也非常广泛,有些老生常谈的问题,这里不再赘述,感兴趣的可以参看我的其它博文:SMART200PLC MODBUS通讯专题_RXXW…...

PyTorch 与 TensorFlow:机器学习框架之战

深度学习框架是简化人工神经网络 (ANN) 开发的重要工具&#xff0c;并且其发展非常迅速。其中&#xff0c;TensorFlow 和 PyTorch 脱颖而出&#xff0c;各自在不同的机器学习领域占有一席之地。但如何为特定项目确定理想的工具呢&#xff1f;本综合指南[1]旨在阐明它们的优点和…...

超简单理解冒泡排序

1.冒泡排序(Bubble Sort) 较简单排序算法。 它会遍历若干次要排列的数列&#xff0c;每次遍历&#xff0c;会从前往后比较相邻两个数的大小。 如果前者比后者大&#xff0c;就交换他们位置。遍历一次最大元素在数列末尾。重复直到数列有序。 那么遍历需要一个变量控制范围。…...

模拟IC设计工程师成长日记

很多IC设计的新人&#xff0c;不知道进入IC设计行业后会有哪些成长和学习的地方。 很多初入IC设计职场的人也都会比较恐慌&#xff0c;成长进步需要一个时间和经验的积累 今天给大家找了一个叫“模拟IC设计“攻城狮”的成长日记供大家参考. 以模拟IC设计工程师的身份进入职场&a…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...