Node.js基础知识
1.什么是Node.js?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效
Node.js平台使用的开发语言是JavaScript,平台提供了操作系统低层的API,方便做服务器端编程,具体包括文件操作、进程操作、通信操作等系统模块
要开发运行在Node.js平台上的程序,用的也是JavaScript语言进行编程
2.什么是V8引擎?
V8引擎是一款专门对JavaScript语言进行解释和执行的流程虚拟机
例如:
-把V8引擎嵌入到浏览器中,那么我们写的JavaScript代码就会被浏览器所执行;
-把V8引擎嵌入到NodeJS环境下,那么我们写的JavaScript代码就会被服务器所执行。
- V8引擎嵌入到不同的宿主环境中时,可以把JavaScript语言应用到不同的多领域中。
3.Node.js特点?
3.1单线程
3.2非阻塞I/O
3.2.1传统单线程: 当在访问数据库取得数据的时候,需要一段时间。在传统的单线程处理机制中,在执行了访问数据库代码之后,整个线程都将暂停下来,等待数据库返回结果,才能执行后面的代码。也就是说,I/O阻塞了代码的执行,极大地降低了程序的执行效率。
3.2.2Node单线程: Node.js中采用了非阻塞型I/O机制,因此在执行了访问数据库的代码之后,将立即转而执行其后面的代码,把数据库返回结果的处理代码放在回调函数中,从而提高了程序的执行效率。
3.3事件驱动
3.3.1当某个I/O执行完毕时,将以事件的形式通知执行I/O操作的线程,线程执行这个事件的回调函数。为了处理异步I/O,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。
3.3.2在Node中,在一个时刻,只能执行一个事件回调函数, 但是在执行一个事件回调函数的中途,可以转而处理其他事件,然后返回继续执行原事件的回调函数,这种处理机制,称为“事件环”机制。
Node.js这样做的优势:
1.开启线程是非常占用资源的, 为了避免浪费资源, 所以Node不开线程
2.不开线程就是单线程, 单线程会阻塞, 效率低下(前面的没有执行完, 后面的不能执行)
3.Node为了解决这个问题, 采用了消息(事件)机制, (前面的阻塞了, 立刻去执行其它的, 前面的回来了, 再继续执行前面的)
这样做的好处是提升了处理的效率, CPU随时随地都在做事情 ,而不是闲着
4.Node.js之父
Ryan Dahl(瑞安·达尔)
2009年推出Node.js, 2012年退出Node.js, 转战Go语言
5.Node.js应用场景:
-网站开发(如express/koa等)
-im即时聊天(socket.io)
- api(移动端,pc,h5)
-HTTP Proxy(淘宝、Qunar、腾讯、百度都有)
-前端构建工具(grunt/gulp/bower/01webpack/fis3…)
-跨平台打包工具
+ PC端的electron、nw.js,比如钉钉PC客户端、微信小程序IDE、微信客户端,移动的cordova,Phonegap,一站式开发框架ionic framework
-写操作系统(NodeOS)
-命令行工具(比如cordova、shell.js)
-反向代理(比如anyproxy,node-http-proxy)
-编辑器Atom、VSCode等
*** 企业中的应用场景: 中间件
6.Node.js安装:
6.1官网下载: https://nodejs.org/zh-cn/
6.2全程下一步
6.3node -v
npm命令基本使用
概念
- 什么是NPM(node.js package management)
- 类似于QQ管家/360管家
- 只要安装了Node.js, 就自动包含了NPM包管理工具(node安装目录下的node_modules中)
- NPM帮助其完成了第三方模块的发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统
- 官方网站: https://www.npmjs.com/ 管理的包都是从这个网站下载
NPM包安装方式
- 全局安装 (一般用于安装全局使用的工具, 存储在全局nodejs/node_modules中)
直接在命令行中打开就是全局- 安装命令:
npm install -g 包名
(默认安装最新版本) - 卸载命令:
npm uninstall -g 包名
- 更新命令:
npm update -g 包名
(更新失败可以直接使用install,这个命令使用的不多)
- 安装命令:
- 本地安装
一般用于安装当前项目使用的包, 存储在当前项目node_modules中- 安装命令:
npm install 包名
(默认安装最新版本) - 卸载命令:
npm uninstall 包名
- 更新命令:
npm update 包名
- 安装命令:
NPM初始化本地包
- 初始化命令:
npm init -y
本地生成一个package.json
文件(全程自动确认)
NPM局部安装包
- 1.进入需要安装的目录
- 2.生成项目的配置文件
npm init -y --> 生成package.json文件
包的描述文件, 定义了这个项目所需要的各种模块, 以及项目的配置信息(项目名称/版本/许可协议...)
- 执行命令
npm i 包名
- 执行命令
两个命令:
npm i 包名 --save
npm i 包名 -s
npm i 包名 --save-dev
npm i 包名 -D
两种安装方式的区别:
npm i 包名 和 npm i 包名 --save是一样的
npm i 包名 --save会将依赖添加到dependencies
npm i 包名 --save-dev
npm i 包名 --save-dev会将依赖添加到devDependencies
dependencies: 生产(部署)环境
devDependencies: 开发(调试)环境
在企业开发中并不是所有安装的包在上线的时候都需要用到, 所以才有了dependencies和devDependencies
那么我们只需要将开发阶段使用的包的依赖添加到devDependencies中, 将部署阶段依赖的包添加到dependencies中, 那么以后就可以很方便的安装相关的依赖
如果想安装部署阶段相关的包, 那么只需要执行
npm i --production 生产部署环境的包
npm i --development 开发环境的包
注意点:
如果利用npm管理代码, 那么在将代码拷贝给别人的时候, 一定不要把node_modules文件夹
也拷贝给别人,因为这个文件夹体积比较大, 文件比较零碎, 不利于我们拷贝,别人拿到项目只需要执行npm i
就会自动下载相关依赖
nrm基本知识
- nrm: 是一个管理下载地址镜像的工具, 我们可以通过nrm自有的切换从什么地方下载
- 如何安装nrm?
- 通过npm命令:
npm i -g nrm
- 通过npm命令:
nrm 的相关命令
nrm ls 查看有哪些可以使用的镜像地址
nrm use 镜像地址名称 切换当前使用的地址
注意点:
nrm不具备npm的功能, 它仅仅是用来切换下载地址的