上海品划网站建设有限公司,一键logo设计官网,淄博网站制作公司服务,wordpress 表单 验证码目录 概要**对Node的认识****Node的概念理解****Node和浏览器区别****Node的架构图** **Node的应用场景****Node的安装****安装Node的LTS版本****Node的版本管理工具nvm(了解)** **Node的输入和输出**Node程序传递参数Node的输出 **Node的全局对象****特殊的全局对象****其他的… 目录 概要**对Node的认识****Node的概念理解****Node和浏览器区别****Node的架构图** **Node的应用场景****Node的安装****安装Node的LTS版本****Node的版本管理工具nvm(了解)** **Node的输入和输出**Node程序传递参数Node的输出 **Node的全局对象****特殊的全局对象****其他的全局对象**global对象 Date: August 23, 2024 概要
240824
Sum:
本节主要谈了谈对于 Node 的认识以及 Node 的应用场景。
然后从实践角度谈了谈 Node 的安装过程以及 Node 的输入输出 和 全局对象的理解。
需要记住的东西
Node的概念
Node.js是一个基于V8引擎的JS运行时环境。
Node的安装
nvm与n来进行版本管理
全局对象
浏览器环境的全局对象指window而node环境指global。在新的标准中还有一个globalThis也是指向全局对象的。在浏览器环境下globalThis是指window在node环境下是global。 对Node的认识
Node的概念理解
官方对于Node.js的定义Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。
Node.js基于V8引擎来执行JavaScript的代码但是不仅仅只有V8引擎
前面我们知道V8可以嵌入到任何C 应用程序中无论是Chrome还是Node.js事实上都是嵌入了V8引擎来执行JavaScript代码
但是在Chrome浏览器中还需要解析、渲染HTML、CSS等相关渲染引擎另外还需要提供支持浏览器操作的API、浏览器自己的事件循环等
另外在Node.js中我们也需要进行一些额外的操作比如文件系统读/写、网络IO、加密、压缩解压文件等操作 Node和浏览器区别 注意这个暂时看一眼即可 Node的架构图
我们编写的JavaScript代码会经过V8引擎再通过Node.js的Bindings将任务放到Libuv的事件循环中
libuvUnicorn Velociraptor—独角伶盗龙是使用C语言编写的库
libuv提供了事件循环、文件系统读写、网络IO、线程池等等内容 Node的应用场景
前端常用
应用一目前前端开发的库都是以node包的形式进行管理
应用二npm、yarn、pnpm工具成为前端开发使用最多的工具
后端常用
应用三越来越多的公司使用Node.js作为web服务器开发、中间件、代理服务器
应用四大量项目需要借助Node.js完成前后端渲染的同构应用
更多维度
应用五资深前端工程师需要为项目编写脚本工具前端工程师编写脚本通常会使用JavaScript而不是Python或者shell
应用六很多企业在使用Electron来开发桌面应用程序 Node的安装
安装Node的LTS版本
版本概念
LTS版本Long-term support, 长期支持相对稳定一些推荐线上环境使用该版本
Current版本最新的Node版本包含很多新特性
版本选择
如果你是学习使用可以选择current版本
如果你是公司开发建议选择LTS版本面向工作选择LTS版本
Node的安装方式
借助于一些操作系统上的软件管理工具比如Mac上的homebrewLinux上的yum、dnf等
直接下载对应的安装包下载安装 Node的版本管理工具nvm(了解)
nvmNode Version Manager
nInteractively Manage Your Node.js Versions交互式管理你的Node.js版本
问题这两个工具都不支持window
nn is not supported natively on Windows.
nvmnvm does not support Windows Node的输入和输出
输出: console.log输入: node aaa.js 参数process.argv Node程序传递参数
正常情况下执行一个node程序直接跟上我们对应的文件即可
node index.js但是在某些情况下执行node程序的过程中我们可能希望给node传递一些参数
node index.js envdevelopment coderwhy如果我们这样来使用程序就意味着我们需要在程序中获取到传递的参数
获取参数其实是在process的内置对象中的
如果我们直接打印这个内置对象它里面包含特别的信息
其他的一些信息比如版本、操作系统等大家可以自行查看后面用到一些其他的我们还会提到
**现在我们先找到其中的argv属性**我们发现它是一个数组里面包含了我们需要的参数 你可能有个疑问为什么叫argv呢
在C/C程序中的main函数中实际上可以获取到两个参数
pargcargument counter的缩写传递参数的个数
pargvargument vector向量、矢量的缩写传入的具体参数。
vector翻译过来是矢量的意思在程序中表示的是一种数据结构。
在C、Java中都有这种数据结构是一种数组结构
在JavaScript中也是一个数组里面存储一些参数信息
我们可以在代码中将这些参数信息遍历出来使用 Node的输出
最常用的输入内容的方式console.log
清空控制台console.clear
打印函数的调用栈console.trace
还有一些其他的方法其他的一些console方法可以自己在下面学习研究一下。
参考https://nodejs.org/dist/latest-v16.x/docs/api/console.html
Case:
// 1.输出的内容
console.log(Hello World)const num1 100
const num2 200console.log(num1 num2)// 2.给程序输入内容
// node ./webpack.config.js envdevelopment
const arg1 process.argv[2]
const arg2 process.argv[3]console.log(arg1, arg2)setTimeout(() {// console.clear()console.trace()
}, 3000);终端中输入内容
nathanchen192 01_Node基础知识 % node 02_Node的输入和输出.js 100 200 300
Hello World
300
100 200Node的全局对象
特殊的全局对象
为什么我称之为特殊的全局对象呢
这些全局对象实际上是模块中的变量只是每个模块都有看来像是全局变量
在命令行交互中是不可以使用的
包括__dirname、__filename、exports、module、require()
__dirname: 获取当前文件所在的路径
__filename: 获取当前文件所在的路径和文件名称
Case:
// __dirname当前的文件所在的目录结构(重要)
console.log(__dirname)
// __filename当前目录文件名称
console.log(__filename)nathanchen192 01_Node基础知识 % node 03_Node中的全局对象.js
/Users/nathanchen/Downloads/CoderWhy/05_前端工程化/day48-前端工程化基础/Learn_Node_Webpack_Git/01_Node基础知识
/Users/nathanchen/Downloads/CoderWhy/05_前端工程化/day48-前端工程化基础/Learn_Node_Webpack_Git/01_Node基础知识/03_Node中的全局对象.js其他的全局对象
processconsole定时器setTimeoutsetIntervalsetImmediateprocess.nextglobal和window的区别globalThis
**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])callbackI / O事件后的回调的“立即”执行
这里先不展开讨论它和setTimeout(callback, 0)之间的区别
因为它涉及到事件循环的阶段问题我会在后续详细讲解事件循环相关的知识
process.nextTick(callback[, …args])添加到下一次tick队列中
具体的讲解也放到事件循环中说明 global对象
global是一个全局对象事实上前端我们提到的process、console、setTimeout等都有被放到global中
我们之前讲过在新的标准中还有一个globalThis也是指向全局对象的
理解在浏览器环境下globalThis是指window在node环境下是global 类似于浏览器中的window global和window的区别
在浏览器中全局变量都是在window上的比如有document、setInterval、setTimeout、alert、console等等
在Node中我们也有一个global属性并且看起来它里面有很多其他对象。
但是在浏览器中执行的JavaScript代码如果我们在顶级范围内通过var定义的一个属性默认会被添加到window对象上
let name nathan
console.log(window.name) // nathan但是在node中我们通过var定义一个变量它只是在当前模块中有一个变量不会放到全局中
let name nathan
console.log(global.name) // undefined