一、什么是node.js
Node.js是JavaScript语言的服务器运行环境。
Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
二、为什么要用node.js
javaScript语言本身是完善的函数式语言,在前端开发时,开发人员往往写得比较随意,让人感觉JavaScript就是个“玩具语言”。无法像其他编程语言一样满足工程的需要。
但是,在Node环境下,通过模块化的JavaScript代码,加上函数式编程,并且无需考虑浏览器兼容性问题,直接使用最新的ECMAScript 6标准,可以完全满足工程上的需求。
Node.js 适合以下场景:
1、实时性应用,比如在线多人协作工具,网页聊天应用等。
2、以 I/O 为主的高并发应用,比如为客户端提供 API,读取数据库。
3、流式应用,比如客户端经常上传文件。
4、前后端分离。
三、node.js 中的npm
1、npm 是什么
npm(即 node package manager )是Node的包管理工具,能解决NodeJS代码部署上的很多问题npm里面有接近60万个别人已经写好的包,到目前为止,npm差不多收集了60万个别人写好的包,其实每个包就是一个功能,一个需求,npm里面有关于创建服务器的包,启动电脑摄像头的包,如果正好我们有这些需求,那么我们就没必要自己去写代码,完全可以用别人已经写好的包
npm是随同Nodejs一起安装的包管理工具,能解决Nodejs代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入
" npm -v " 来测试是否成功安装。
命令如下,出现版本提示表示安装成功:
如果安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下:
c:\ npm install npm -g
2、npm 命令安装模块
npm 的包安装分为本地安装(local)、全局安装(global)两种,
命令如下:
npm install express //本地安装
npm install express -g //全局安装
如果出现以下错误:
npm err! Error: connect ECONNREFUSED 127.0.0.1:8087
解决办法为:
$ npm config set proxy null
(1)本地安装
将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
可以通过 require() 来引入本地安装的包。
(2)全局安装
将安装包放在 /usr/local 下或者你 node 的安装目录。
可以直接在命令行里使用。
如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。
3、选用 cnpm
1、cnpm 的官方介绍是:cnpm是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。既然都一样,那么cnpm为什么要出现呢?
由于npmjs.org的服务器在国外(即在“墙”外),国(墙)内开发者做项目的时候,很多“包”的下载速度极慢,在这种环境下阿里巴巴为了众多开发者的便捷便挺身而出推出了淘宝镜像(即cnpm),它把npm官方的“包”全部搬到国内,供广大开发者使用。
使用淘宝镜像的命令:
npm install -g cnpm --registry=https://registry.npmmirror.com
2、安装cnpm,使用命令 npm install cnpm -g --registry=https://registry.npm.taobao.org 安装完成后用 cnpm -v 查看是否安装成功
3、cnpm的使用方法和npm完全一致,只需要把npm改成cnpm即可
四、node.js 的模块化
Node应用是由模块组成,遵循的是CommonJS模块规范
1、CommonJS模块规范及规范化内容
CommonJS 是一套代码规范, 目的是为了构建 JavaScript 在浏览器之外的生态系统 (服务器端, 桌面端).
通过该规范使JavaScript具备开发复杂应用、跨平台的能力
CommonJS模块规范化的内容
(1)导出模块:moudle.exports 导出模块
(2)导入模块:require('模块名称')
2、moudle对象
每个导出的模块都有一个moudle对象,该对象包含的属性有:
moudle.exports:表示当前模块对外输出的接口,其他模块引用的是moudle.exports导出的变量 。
exports变量:指向moudle.exports,为了操作的方便,它不能直接指向一个值
这等同在每个模块头部,有一行这样的命令。
var exports = module.exports;
3、使用require导入模块
导入并执行一个JavaScript文件,返回的是一个exports对象,若没有找到相应的对象就报错
(1)模块输出是一个函数,则该函数的输出接口不能用exports变量来导出,必须用户moudle.exports导出
(2)加载规则:
A、用来加载js文件,默认的文件扩展名为.js
var foo = require('foo');
// 等同于var foo = require('foo.js');
B、根据参数的不同格式,去不同路径下查找相应的js文件
'./(../)':表示加载路径是相对路径
'/':表示加载路径是绝对路径
既不是'./(../)'也不是'/':表示加载的模式是node的核心模块,在node安装路径的node_modules中
(3)require的内部处理的流程
require -->module.exports-->moudle._load