Node.js
what is Node.js
Node.js是基于谷歌V8引擎的JavaScript的运行环境
- 是运行环境
- 可以按照客户端JavaScript来书写js代码
- 可以进行文件读写,进程管理,数据库的操作
- 在Node.js里不能操作dom以及bom
- 在Node.js中全局变量时global而不是window
应用场景
- 实时应用:如在线聊天,实时通知推送等等(如socket.io)
- 分布式应用:通过高效的并行I/O使用已有的数据
- 工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程序、
- 游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo框架)
- Web服务器:利用稳定接口提升Web渲染能力
- 前后端编程语言环境统一:前端开发人员可以非常快速地切入到服务器端的开发(如著名的纯Javascript全栈式MEAN架构
安装
NVM 进行Node.js的版本管理
- list ls 列举所有已安装的版本
- list available ls-remote 列出所有官网的版本
- nvm install 版本号 安装对应版本号的node.js
- nvm use 版本号 切换node.js版本
NRM 进行包的源管理
- npm 安装nrm
- nrm ls 列出所有可用的npm包源
- nrm use 源
- nrm add 添加一个源
- nrm del 删除一个源
Tips
有两种方式来运行node.js
- 直接在终端上执行node命令:REPL
- 书写js文件 通过node命令 加上 参数 入口文件
- 安装nodemon 时时检测文件变化,自执行。
npm install -g nodemon
模块化
模块化能隐藏私有的属性和方法,只暴露出公共接口
CommonJS规范
Node.js的模块系统就采用CommonJS规范。CommonJS标准规定:
- 一个单独的文件就是一个模块,
- 模块内将需要对外暴露的变量放到exports对象里,可以是任意对象,函数,数组等,未放到exports对象里的都是私有的。
- 用require方法加载模块,即读取模块文件获得exports对象。
warning
在Node.js中,模块对外暴露接口时,实际上就是通过module.exports来实现的。exports只是对module.exports的一个引用。当替换默认对象来暴露接口时,不能使用exports。
全局变量
- __dirname : 当前模块所在的目录路劲
- __filename: 当前模块的文件名字
- console
模块属性
- module.id: 模块的唯一标识
- module.loaded:标记模块是否加载
- module.parent: 引用模块的模块