|
Node.js
Node.js不是JS文件,也不是一个JS框架,而是Server side JavaScript runtime,服务器的一个JS运行时
Node.js是一个基于Chrome v8 引擎的JavaScript运行环境
Node.js使用了一个事件驱动、非阻塞式的I/O模型,使其轻量又高效。
Node.js的包管理器nmp,是全球最大的开源库生态系统
NVM
Nodejs下载安装[不建议]
NPM
NPM镜像
cnpm
启用交互解释器
nrm
Nodesjs由哪几部分组成
事件循环
事件驱动程序
EventEmitter
NVM
Nodejs的版本管理工具(Node Version Manager),由于Nodejs迭代速度特别快,不同的项目可能需要不同的版本,NVP就类似Python中Anaconda?可以管理不同的Python版本?
nvm可以很方便管理node的版本
npm可以很方便的管理node所需包
windows:https://github.com/coreybutler/nvm-windows/releases下载zip文件即可
linux:https://github.com/creationix/nvm
简单使用:https://www.jianshu.com/p/8671e439a811
配置淘宝镜像:
由于nvm下载node时太慢,我们在其中添加淘宝镜像
windows在nvm安装包下的settings文件下配置如下:
root: D:\nvm_setup\nvm
path: D:\nvm_setup\nodejs
arch:64
proxy:none
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
linux配置nvm下载node环境的镜像
- 在用户环境变量下加入,激活
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
- 配置node环境的npm镜像
- 打印默认的 registry 地址
npm config -g get registry
# https://registry.npmjs.org/
- 设置淘宝镜像
npm config -g set registry https://registry.npm.taobao.org
下载node:
nvm install v7.9.0 #命令后加版本号就可以进行安装,字母v可以不写,如下图
卸载:
查看当前正在使用的node版本:
首先启动nvm,不启动nvm在控制台输入node会报node不是内部或外部命令。
nvm on # 输入后会打印nvm已启动,并且显示当前正在使用的版本
关闭nvm:
nvm off # 关闭nvm后,系统就会屏蔽对node的使用
切换node版本:
Nodejs下载安装[不建议]
建议使用nvm去安装(nvm install node版本号)!
傻瓜式安装-安装后命令行输入:path,可以查看到安装过程中已经将nodejs路径加入了path中
NPM
由于node是亲内核的,本事没有这么多功能,但是有很多包,但是包和包直接存在依赖,我们需要一个工具帮我们管理包。这就需要使用NPM了。
类似java的maven,是随同Nodejs一起安装的包管理工具,能解决Nodejs代码部署上的很多问题。
使用场景:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
注意:新版的nodejs已经集成了npm,输入npm -v即可查看是否安装成功。
配置
window下修改npm安装包的全局路径(类似于maven的setting文件中安装包的全局路径),新建.npmrc文件,内容如下:
cache=E:\nvm-setup\npm\cache
prefix=E:\nvm-setup\npm\repository
cache表示缓存目录,prefix表示npm包安装目录。然后将该文件丢到user/admin目录下。然后判断是否设置成功:命令行:
如果打印出自己所配置的内容,就代表设置成功。以后在使用npm install -g <package modul>安装全局包时就会安装在这个配置的目录下(-g:global)。
然后将prefix对应的目录设置到环境变量中。
常用命令
windows下安装/升级npm:
linux下升级/安装
使用npm安装模块:
npm install <Module Name>
// @版本号 下载对应版本号的模块
// --save 保存到package文件。 如果有了package文件,打包项目可以直接删除node_modules模块,当别人使用时,可以直接在项目中使用nmp install命令自动读取package.json,生成新的node_modules模块。其实就是在package.json里添加了这个模块的依赖。
// --save-dev 表示在开发环境下使用
何为开发依赖?何为项目依赖?
npm提供了一些工具包:gulp,我们自己做的东西跟他没关系,但是开发时候需要用到,gulp就属于开发阶段的依赖。boostrap,我们做的页面用到了这个包,bootstrap就是任何环节都依赖,这是项目依赖。当生成package文件的时候,将项目打包给别人的时候(没有node_modules),别人会通过npm install初始化package中所需要的包,这时候不会去安装开发依赖所需要的包】
例如:使用npm 安装常用的Nodejs web框架模块express
npm install express
安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。
其类似于maven ,也会将依赖的包一起添加进来。
全局安装与本地安装
类似java maven的全局库与本地库吧。
npm install express # 本地安装
npm install express -g # 全局安装
如果出现错误:
npm err! Error: connect ECONNREFUSED 127.0.0.1:8087
解决办法:
$ npm config set proxy null
本地安装
将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
可以通过 require() 来引入本地安装的包。
全局安装
将安装包放在 /usr/local 下或者你 node 的安装目录。
可以直接在命令行里使用。
如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。
查看安装信息:
npm list -g
查看某个模块的版本号:npm list 模块名
使用package.json
package.json 位于模块的目录下,用于定义包的属性。
例如上面安装的express模块:【node_modules/express目录下】
卸载模块、更新模块、搜索模块
npm uninstall <Module Name>
npm update <Module Name>
npm search <Module Name>
创建模块
创建模块,package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。
项目根目录下执行
然后根据提示输入你要创建模块的信息,最后yes,生成的package.json就在项目的根目录下。(使用npm init --yes可生成默认的package.json文件)
注册npm资源库【username:liuwei04 password:常用密码之一 邮箱:qq邮箱】
发布自己的模块
如果你以上的步骤都操作正确,你就可以跟其他模块一样使用 npm 来安装。先创建自己的模块,然后发布到远程npm库上,再用时就使用npm install yourpackageName【要先npm login】
NPM镜像
cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
启用交互解释器
类似windows/linux终端,或者mongoDB的终端【mongo.exe】
nrm
nrm的作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址;
什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原由,经常访问不到,这时候,我们可以在国内,创建一个和官网一样的NPM服务器,只不过,数据都是从人家那里拿过来,除此之外,使用方式完全一样;
1、运行:
2、使用:
nrm ls # 查看当前所有可用的镜像源地址以及当前所使用的镜像源地址
3、使用:
nrm use npm 或 nrm use taobao # 切换不同的源地址
nrm只是提供不同的源地址,真正下载安装还是使用npm命令去装,只是从nrm指定的镜像源里下载罢了。
Nodesjs由哪几部分组成
引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。【类似于java中的import】
创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。
接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。
案例:
var http = require('http');
http.createServer(function (request,response) {
// 发送HTTP头部
//HTTP状态值:200:OK
//内容类型:text/plain
response.writeHead(200,{'Content-Type':'text/plain'});
//发送相应数据“Hello World”
response.end("Hello World\n");
}).listen(8888);
//终端打印如下信息;
console.log('Server running at http://127.0.0.1:8888/')
// 在server.js所在目录启动终端:运行node server.js,即可启动服务器
Nodejs回调函数
Node.js 异步编程的直接体现就是回调。
异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。
回调函数一般作为函数的最后一个参数出现:
function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }
事件循环
Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。
Node.js 几乎每一个 API 都是支持回调函数的。
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。
Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.
事件驱动程序
Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。
当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。
这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。
整个事件驱动的流程就是这么实现的,非常简洁。有点类似于观察者模式,事件相当于一个主题(Subject),而所有注册到这个事件上的处理函数相当于观察者(Observer)。
EventEmitter
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
功能的封装。
前进时,请别遗忘了身后的脚印。
来源:https://www.cnblogs.com/liudaihuablogs/p/13468411.html |