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 基础命令

  1. 先查看本机node.js版本:
node -v
  1. 清除node.js的cache:
sudo npm cache clean -f  # Window系统去除sudo即可。
  1. 安装最新版本的node.js
sudo n stable  # Window系统去除sudo即可。
  1. 设置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

REPLRead-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-简介与安装的更多相关文章

  1. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  2. Java Gradle入门指南之简介、安装与任务管理

        这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍.    ...

  3. 细细品味Storm_Storm简介及安装

    Storm是由专业数据分析公司BackType开发的一个分布式实时数据处理软件,可以简单.高效.可靠地处理大量的数据流.Twitter在2011年7月收购该公司,并于2011年9月底正式将Storm项 ...

  4. VMware vSphere 5.1 简介与安装

    虚拟化系列-VMware vSphere 5.1 简介与安装  标签: 虚拟化 esxi5.1 VMware vSphere 5.1 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  5. Nutch搜索引擎(第2期)_ Solr简介及安装

    1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...

  6. Node.js的简介和安装

    一.Node.js的简介和安装 a)       什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...

  7. Nutch之简介与安装

    初学Nutch之简介与安装 初学Nutch之简介与安装   1.Nutch简介 Nutch是一个由Java实 现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其 ...

  8. Nutch搜索引擎Solr简介及安装

    Nutch搜索引擎(第2期)_ Solr简介及安装   1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...

  9. DNN简介以及安装

    开源框架DNN简介以及安装 donetnuke 是一款免费的开源cms框架,目前也有收费版,不过免费版也可以适应大家大部分的需求.我前些阵子是老板让我在20天内,做好一个官网并且发布,并且指定使用dn ...

  10. Grant简介以及安装

    Grant简介以及安装 1.   安装Grunt-cli需要使用npm,全局安装  命令:npm install –g grunt-cli(可能会涉及权限问题) 注意,安装grunt-cli并不等于安 ...

随机推荐

  1. XSS--labs通关记录

    XSS--labs通关记录 level 1(无过滤) 查看网页源代码 <!DOCTYPE html><!--STATUS OK--><html> <head& ...

  2. 【技术积累】Linux中的命令行【理论篇】【十】

    bunzip2 命令说明 bunzip2命令是Linux系统中的一个用于解压缩文件的命令.它可以解压缩使用bzip2算法压缩的文件,将其恢复为原始的未压缩文件. 命令介绍 bunzip2命令的语法如下 ...

  3. AI绘画:StableDiffusion炼丹Lora攻略-实战萌宠图片生成

    写在前面的话 近期在小红书发现了许多极其可爱.美观的萌宠图片,对这些美妙的图像深深着迷 于是想着看看利用AI绘画StableDiffusion以下简称(SD)做出来. 以下是详细实操的全过程,包括所有 ...

  4. 关于ChatGPT的一些闲扯淡(1)

    这篇写的有点迟了,前者子ChatGPT正火的时候,懒病发作一直拖延.今天对ChatGPT做一个简单的讨论,也是把学习的心得和大家分享一下. 首先什么是GPT,英文全称是Generative Pretr ...

  5. 升级java11后,maven命令打包报错

    一.问题 升级java11后,maven命令打包报错: mvn clean package -Dmaven.test.skip=true [ERROR] Failed to execute goal ...

  6. QA|如何实现一个函数读取1-9按钮?|网页计算器自动化测试实战

    如何实现一个函数读取1-9按钮? 如何实现一个根据我们Json存的数字,自动选取对应按钮点击,并且点击对应算法? 首先我们肯定不能给每个元素都写一个函数吧,毕竟挺多,而且如果这样写了,那加减乘除都要分 ...

  7. RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏镜像+支持hdmi屏镜像)

    前言   编译了uboot,kernel,buildroot后,可以单独输入固件,也可以整体打包成rootfs进行一次性输入,rootfs直接更新升级这个方式目前也是常用的.   烧写器软件:RKDe ...

  8. linux tcpdump 使用小结(二)

    转载请注明出处: TCPDump是一个功能强大的网络抓包工具,它能够在命令行界面捕获.分析和解析网络数据包.下面是TCPDump命令的使用总结,包括使用语法.常用参数说明等: 使用语法:tcpdump ...

  9. 【SpringBoot实战】开发入门--快速创建springboot程序

    前言 本片博客记录快速创建springboot工程的使用spring initializr创建.开发环境JDK1.8.IDEA.maven. SpringBoot 优点 可快速构建spring应用 直 ...

  10. MFC中使用函数实现ini文件的连续读写

    实现的思路: 首先通过读取文件中的count值,确定当前信息条数: 第二步:将count进行累加,把信息写到累加后的键值"="的后面: 第三步:写入count累加值,实现连续读写: ...