NodeJS简介
1.什么是Node.js?
Node.js是一个基于"Chrome V8引擎"的JavaScript"运行环境"。
2.什么是V8引擎?
V8引擎是一款专门解释和执行JavaScript代码的虚拟机。任何程序只要集成了V8引擎,就可以执行JavaScript代码。浏览器集成了V8引擎,可以执行JavaScript代码;将V8引擎嵌入到NodeJS中,那么我们写的JavaScript代码就会被NodeJS所执行。
3.什么是运行环境?
运行环境就是生存环境。
地球是人类的生存环境,浏览器是网页的生存环境,windows是.exe应用程序的生存环境,Android是.apk应用程序的生存环境。也就是说运行环境就是特定事物的生存环境。
NodeJS也是一个生存环境。由于NodeJS中集成了V8引擎,所以NodeJS是JavaScript应用程序的一个生存环境。
总之NodeJS不是一门编程语言,NodeJS是一个运行环境,。由于这个运行环境集成了V8引擎,所以在这个运行环境下可以运行JavaScript代码。这个运行环境最大的特点就是提供了可以操作”操作系统底层的API“。通过这些底层API,我们可以编写出网页中无法实现的功能,比如:打包工具, 网站服务器等等。
NodeJS运行环境搭建
如何搭建NodeJS运行环境呢?常见的方式有2种。
a.搭建方式一:
1.NodeJS官网下载.msi安装包。
2.全程下一步。
3.在cmd命令行工具中输入node -v并按回车键,如果看到了版本号,就说明NodeJS已经安装好了。
b.搭建方式二:
1.下载nvm-windows,选择nvm-noinstall.zip下载。
2.创建一个文件夹,例如在C盘新建文件夹并重命名为Dev。
3.在Dev中创建两个子目录NVM和Node, 并且把nvm-noinstall.zip包解压进去NVM目录中。
4.选中install.cmd文件并右键选择【以管理员身份运行】,在终端中直接按下回车,将弹出的文件settings.txt另存为到NVM目录。
5.打开settings.txt文件,修改如下:
root: C:\Dev\NVM
path: C:\Dev\Node
6.配置环境变量:
NVM_HOME:
C:\Dev\NVM
NVM_SYMLINK:
C:\Dev\Node
在Path中添加 %NVM_HOME% 和 %NVM_SYMLINK%
7.在cmd命令行工具中输入nvm version并按回车键,看到版本号说明已经安装好了。
NVM常用命令:
- nvm list 查看当前安装的Node.js所有版本
- nvm install 版本号 安装指定版本的Node.js
- nvm uninstall 版本号 卸载指定版本的Node.js
- nvm use 版本号 选择指定版本的Node.js
NodeJS执行JS代码
浏览器和NodeJS都集成了V8引擎(注释:V8引擎是JavaScript引擎之一,常见的JavaScript引擎还有SpiderMonkey,JaegerMonkey, Carakan,Nitro, KJS等)。浏览器和NodeJS如何执行JS代码呢?
浏览器执行JavaScript的方式:
a.可以直接在浏览器控制台中执行JS代码。b.可以在浏览器中执行JS文件中的JS代码。
NodeJS执行JavaScript的方式:
a.可以直接在命令行工具中编写执行JS代码(REPL -- Read Eval Print Loop:交互式解释器)。在cmd命令行中输入node并按回车键进入REPL环境。
b.可以在命令行工具中执行JS文件中的JS代码。
NodeJS环境和浏览器环境执行JS代码区别
NodeJS环境和浏览器环境一样都是一个JS的运行环境,都可以执行JS代码。但是由于宿主不同,所以特点也有所不同。
1.内置对象不同
浏览器环境中提供了全局对象window,NodeJS环境中的全局对象不叫window,叫global。
2.this默认指向不同
浏览器环境中全局this默认指向window,NodeJS环境中全局this默认指向空对象{}。
3.API不同
浏览器环境中提供了操作节点的DOM相关API和操作浏览器的BOM相关API。NodeJS环境中没有HTML节点也没有浏览器,所以NodeJS环境中没有DOM/BOM。
NodeJS全局属性和方法
和浏览器一样,NodeJS环境中的全局对象也提供了很多属性和方法供我们使用。
例如:
__dirname: 当前文件所在文件夹的绝对路径
__filename: 当前文件的绝对路径
setInterval / clearInterval : 和浏览器中window对象上的定时器一样
setTimeout / clearTimeout : 和浏览器中window对象上的定时器一样
console : 和浏览器中window对象上的打印函数一样
NodeJS自定义模块
什么是模块?
1.浏览器开发中的模块
在浏览器开发中为了避免命名冲突,方便维护等等,我们采用类或者立即执行函数的方式来封装JS代码,以避免命名冲突和提升代码的可维护性。其实这里的一个类或者一个立即执行函数就是浏览器开发中的一个模块。
例如:let obj = { 模块中的业务逻辑代码 }; (function(){ 模块中的业务逻辑代码; window.xxx = xxx; })();
2.NodeJS开发中的模块
NodeJS采用CommonJS规范实现了模块系统。CommonJS规范规定了如何定义一个模块,如何暴露(导出)模块中的变量和函数,以及如何使用定义好的模块。
- 在CommonJS规范中一个文件就是一个模块
- 在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的
- 在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其它文件才可以使用
- 在CommonJS规范中想要使用其它文件暴露的变量函数必须通过require()导入模块才可以使用
NodeJS模块导出数据几种方式
在NodeJS中想要导出模块中的变量函数,有三种方式。
1.通过exports.xxx = xxx导出
2.通过module.exports.xxx = xxx导出
3.通过global.xxx = xxx导出
需要注意:a.无论通过哪种方式导出, 使用时都需要先导入(require)才能使用。b.通过global.xxx方式导出不符合CommonJS规范,不推荐使用。
exports和module.exports区别
exports只能通过 exports.xxx方式导出数据,不能直接赋值。module.exports既可以通过module.exports.xxx方式导出数据,也可以直接赋值。但是在实际开发中,无论以哪种方式导出都不要直接赋值。
NodeJS-Require注意点
1.require导入模块时可以不添加导入模块的类型
如果没有指定导入模块的类型,那么会依次查找.js .json .node文件。无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们。
2.导入自定义模块时必须指定路径
require可以导入"自定义模块(文件模块)"、"系统模块(核心模块)"、"第三方模块"。导入"自定义模块"模块时前面必须加上路径。而导入"系统模块"和"第三方模块"是不用添加路径,因为"系统模块"直接到环境变量配置的路径中查找,"第三方模块"会按照module.paths数组中的路径依次查找。
NodeJS包和包管理简介
1.什么是包?
在编写代码的时候尽量遵守单一原则。一个函数尽量只做一件事情。例如:读取数据函数/写入数据函数/生成随机数函数等等,不要一个函数既读取数据又写入数据又生成随机数,这样代码容易出错, 也难以维护。
在模块化开发中也一样,在一个模块(一个文件)中尽量只完成一个特定的功能。但是有些比较复杂的功能可能需要由多个模块组成,例如:jQuery选择器相关的代码在A模块,CSS相关的代码在B模块……我们需要把这些模块组合在一起才是完整的jQuery。那么这个时候我们就需要一个东西来维护多个模块之间的关系,这个维护多个模块之间关系的东西就是”包“。
简单理解:一个模块是一个单独的文件, 一个包中可以有一个或多个模块。
2.NodeJS包的管理
为了方便开发人员发布、安装和管理包,NodeJS推出了一个包管理工具NPM(Node Package Manager)。
NPM不需要我们单独安装,只要搭建好NodeJS环境就已经自动安装好了。
NPM相当于电脑上的"软件助手",我们通过NPM可以快速找到和安装我们需要的包,可以快速删除我们不需要的包。
NodeJS-NPM使用
1.NPM包安装方式
NPM包安装分为全局安装和本地安装。这两种方式有什么区别呢?区别就是安装包的位置不一样。
全局安装的包存储在全局node_modules中,在同一台电脑上任何位置都可以使用,一般用于安装全局使用的工具。
本地安装的包存储在当前项目node_modules中,只能在当前项目下可以使用,一般用于安装当前项目使用的包。
全局安装指令:
npm install -g 包名 (默认安装最新版本)
npm uninstall -g 包名
npm update -g 包名 (更新失败可以直接使用install)
2.初始化本地包
初始化指令:
npm init -> 初始化package.json文件
npm init -y -> 初始化package.json文件
包描述文件 package.json, 定义了当前项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。
npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。所以将项目拷贝给其他人或者发布的时候,我们不用把所有的包拷贝给别人,因为那样文件太大不利于部署,我们只需要把
package.json 复制过去就可以了,npm会根据这个
package.json 文件去下载需要的包。
注意点:package.json文件中, 不能加入任何注释。
- dependencies:生产环境中使用的包的依赖,通常是稳定长期支持版本的包,一个关联数组,由包的名称和版本号组成
- devDependencies:开发环境中使用的包的依赖,通常是开发中的或者最新版本的包,一个关联数组,由包的名称和版本号组成
本地安装指令:
有些包可能只在项目开发阶段需要,而在项目上线阶段不需要,所以需要分开指定:
npm install 和 npm install --development 会安装dependencies和devDependencies里面的包,也就是所有的包都会被安装。npm install --production 只会安装dependencies中的包。
NodeJS-NRM使用
1.什么是nrm?
由于npm默认会去国外下载资源,所以对于国内开发者来说下载会比较慢。有人写了一个nrm工具, 允许将资源下载地址从国外切换到国内,以提高下载包的速度。
2.NRM指令
a.安装NRM: npm install -g nrm
b.查看是否安装成功:nrm --version
能看到版本号,说明安装成功了。
c.查看允许切换的资源地址:nrm ls
标*的是当前使用的源(下载网址)。
d.切换源:nrm use taobao
淘宝资源地址和国外的地址内容完全同步。淘宝镜像与官方同步频率目前为 10分钟 一次以保证尽量与官方服务同步。