Node01-简介与安装
01. Node.js是什么?
pNode.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。

也就是说:
Node.js基于V8引擎来执行JavaScript的代码。
V8引擎可以嵌入到任何C++应用程序中,无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行JavaScript代码的。
但需要注意的是:两者都不仅仅只有V8引擎:
Chrome浏览器,还需要其他渲染引擎,以解析、渲染HTML、CSS等,另外还需要提供支持浏览器操作的API、浏览器自己的事件循环等;
而在Node.js中,也需要进行一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作。
1.1 Node.js架构
浏览器和Node.js架构区别:

Node.js底层架构:

我们编写的JavaScript代码会经过V8引擎,再通过Node.js的Bindings,将任务放到Libuv的事件循环中;
libuv(Unicorn Velociraptor—独角伶盗龙)是使用C语言编写的库;
libuv 提供了事件循环、文件系统读写、网络IO、线程池等等内容;
1.2 Node的安装
Node是2009年诞生的,官方提供的版本分为两个:
LTS版本:(Long term support, 长期支持)这个版本相对稳定一些,推荐线上环境使用该版本;
Current版本:最新的Node版本,包含很多新特性;

官方网站:https://nodejs.org/en/download/
下载官方安装,一路安装即可。
window选择.msi安装包,Mac选择.pkg安装包
安装过程中会自动配置环境变量;
并且会自动安装npm(Node Package Manager)工具,类似于Python中的pip。
1.3 基础命令
- 先查看本机node.js版本:
node -v
- 清除node.js的cache:
sudo npm cache clean -f # Window系统去除sudo即可。
- 安装最新版本的node.js
sudo n stable # Window系统去除sudo即可。
- 设置npm下载源:
npm config set registry https://registry.npm.taobao.org
1.4 Node的版本工具
在学习过程,我们只需要使用一个Node版本即可。
但在开发中,常常不同项目需要使用不同的Node版本,此时我们就需要安装多个Node版本。
如果你希望快速更新或切换多个版本时,可以借助于一些工具:
nvm:Node Version Manager;
n:Interactively Manage Your Node.js Versions(交互式管理你的Node.js版本)
这两个工具都不支持window。
如果是在Linux环境下,直接使用npm即可安装n。
sudo npm install -g n
window安装nvm
不过针对nvm,在GitHub上有提供对应的window版本:https://github.com/coreybutler/nvm-windows







安装好nvm之后即可在window进行Node的版本控制。
以下是基本命令:
nvm install latest # 安装最新的node版本
nvm list # 展示目前安装的所有版本
nvm use 版本号 # 切换版本


02. Node基本使用
2.1 REPL
REPL是Read-Eval-Print Loop的简称,翻译为【读取-求值-输出-循环】。
大部分编程语言都会提供这样一个简单的、交互式的编程环境。
浏览器的console就可以看成一个REPL。
Node也为我们提供了一个REPL,在终端中输入node即可进入。
退出有三种办法:
- 直接关掉终端
- 两次ctrl+c
- 输入.exit
2.2 Node的全局对象
在官方文档中,定义了很多全局对象。
process提供了Node进程中相关的信息;
setTimeout(callback, delay[, ...args]):callback在delay毫秒后执行一次;
setInterval(callback, delay[, ...args]):callback每delay毫秒重复执行一次;
setImmediate(callback[, ...args]):callback I/O事件后的回调的“立即”执行;

2.2.1 gloabl对象
global是一个全局对象,我们提到的process、console、setTimeout等都有被放到global中;
相当于浏览器中的window对象。
需要注意的是,当JavaScript代码在浏览器中运行时,新定义的变量是会被存放到window中的,
而在node运行,新定义的变量并不会存放到global中。

在新的标准中,为了防止因全局对象的名称不同而出现问题,新增了一个叫globalThis的全局对象。
在node中,globalThis指向global;
在浏览器中,global指向window。
2.2.2 process.argv
一般情况下,我们在终端执行一个node程序,直接跟上对应的文件即可:
node index.js
在某些情况下,执行node程序的过程中,我们可能希望给node传递一些参数:
node index.js development
对于执行时传入的参数,需要在node的内置对象process中获取,
console.log(process.argv)

argv的输出中:
第一个参数固定是node运行程序所在路径;
第二个参数固定是运行的js文件所在路径;
为什么叫argv呢?
在C/C++程序中的main函数中,实际上可以获取到两个参数:
argc:argument counter的缩写,传递参数的个数;
argv:argument vector(向量、矢量)的缩写,传入的具体参数。
vector翻译过来是矢量的意思,在c程序中表示的是一种数据结构,在C++、Java中都有这种数据结构。
在JavaScript中则被处理成为一个数组;
03. 特殊的全局变量
这些全局对象实际上是模块中的变量,只是每个模块都有,看来像是全局变量;
在命令行交互中是不可以使用的;
包括:__dirname、__filename、exports、module、require()
- __dirname:获取当前文件所在的路径;
- __filename:获取当前文件所在的路径和文件名称。

Node01-简介与安装的更多相关文章
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- Java Gradle入门指南之简介、安装与任务管理
这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍. ...
- 细细品味Storm_Storm简介及安装
Storm是由专业数据分析公司BackType开发的一个分布式实时数据处理软件,可以简单.高效.可靠地处理大量的数据流.Twitter在2011年7月收购该公司,并于2011年9月底正式将Storm项 ...
- VMware vSphere 5.1 简介与安装
虚拟化系列-VMware vSphere 5.1 简介与安装 标签: 虚拟化 esxi5.1 VMware vSphere 5.1 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
- Nutch搜索引擎(第2期)_ Solr简介及安装
1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...
- Node.js的简介和安装
一.Node.js的简介和安装 a) 什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...
- Nutch之简介与安装
初学Nutch之简介与安装 初学Nutch之简介与安装 1.Nutch简介 Nutch是一个由Java实 现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其 ...
- Nutch搜索引擎Solr简介及安装
Nutch搜索引擎(第2期)_ Solr简介及安装 1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...
- DNN简介以及安装
开源框架DNN简介以及安装 donetnuke 是一款免费的开源cms框架,目前也有收费版,不过免费版也可以适应大家大部分的需求.我前些阵子是老板让我在20天内,做好一个官网并且发布,并且指定使用dn ...
- Grant简介以及安装
Grant简介以及安装 1. 安装Grunt-cli需要使用npm,全局安装 命令:npm install –g grunt-cli(可能会涉及权限问题) 注意,安装grunt-cli并不等于安 ...
随机推荐
- 使用$test$plusargs提高RTL验收速度
0 前言 这段时间在整合一个小ip,因为要验证每个feature是否可行,需要用testbench + C语言的方式进行仿真验证,由于每种feature不仅要在C语言中修改寄存器配置,还要再testb ...
- CSS基础(4)
目录 1 定位 1.1 为什么需要定位 1.2 定位组成 1.2.1 边偏移(方位名词) 1.2.2 定位模式 (position) 1.3 定位模式介绍 1.3.1 静态定位(static) - 了 ...
- 聊透 GPU 通信技术——GPU Direct、NVLink、RDMA 审核中
最近人工智能大火,AI 应用所涉及的技术能力包括语音.图像.视频.NLP 等多方面,而这些都需要强大的计算资源支持.AI 技术对算力的需求是非常庞大的,虽然 GPU 的计算能力在持续提升,但是对于 A ...
- Java 中的日期时间总结
前言 大家好,我是 god23bin,在日常开发中,我们经常需要处理日期和时间,日期和时间可以说是一定会用到的,现在总结下 Java 中日期与时间的基本概念与一些常用的用法. 基本概念 日期(年月日, ...
- JDK17和JDK8在windows上同时安装方便切换
参考:https://blog.csdn.net/chencaw/article/details/121674479 一.JDK8的安装 1.电脑上已经安装了JDK8,安装主要步骤如下 (1)创建JA ...
- 「codechef - STRQUER」Strange Queries
link. 首先对原序列排序,考虑静态序列做法为:设 \(f(n,k\in\{0,1\})\) 为对于前 \(n\) 个数,第 \(n\) 个数否 / 是已经决策完毕的最优方案,转移即 \[\begi ...
- Spring Boot RestController接口如何输出到终端
背景 公司项目的批处理微服务,一般是在晚上固定时段通过定时任务执行,但为了预防执行失败,我们定义了对应的应急接口,必要时可以通过运维在终端中进行curl操作.然而,部分任务耗时较长,curl命令执行后 ...
- 有人说SaToken吃相难看,你怎么看。
前言 今天摸鱼逛知乎,偶然看到了一个回答,8月份的,是关于SaToken的,一时好奇就点了进去. 好家伙,因为一个star的问题,提问的人抱怨了许多,我有些意外,就仔细看了下面的评论,想知道一部分人的 ...
- GO语言基础之基本运算符
GO语言基础之基本运算符 目录 GO语言基础之基本运算符 一.运算符 内置运算符: 二.算术运算符 三.关系运算符 四.逻辑运算符 五.位运算符 六.赋值运算符 一.运算符 作用:运算符用于在程序运行 ...
- WebKit Insie: Active 样式表
WebKit Inside: CSS 样式表的匹配时机介绍了当 HTML 页面有不同 CSS 样式表引入时,CSS 样式表开始匹配的时机.后续文章继续介绍 CSS 样式表的匹配过程,但是在匹配之前,首 ...