1. 初识Node.js
Node.js 是一种建立在Google Chrome’s v8 engine上的 non-blocking (非阻塞), event-driven (基于事件的)I/O平台。
Node.js平台使用的开发语言是JavaScript,平台提供了操作系统低层的API,方便做服务器端编程,具体包括文件操作、进程操作、通信操作等系统模块
2. Node.js可以用来做什么?
- 具有复杂逻辑的动态网站
- WebSocket服务器
- 命令行工具
- 带有图形界面的本地应用程序
- ……
3. Node.js开发环境准备
1、普通安装方式官方网站
2、多版本安装方式
1 | 2.1 卸载已有的Node.js |
4. nvm常用的命令
- nvm list 查看当前安装的Node.js所有版本
- nvm install 版本号 安装指定版本的Node.js
- nvm uninstall 版本号 卸载指定版本的Node.js
- nvm use 版本号 选择指定版本的Node.js
5. Node.js之HelloWorld
5.1 命令行方式REPL
REPL read-eval-print-loop 读取代码-执行-打印结果-循环这个过程
在REPL环境中,_表示最后一次执行结果; .exit 可以退出REPL环境
5.2 运行文件方式
1 | /* |
6. 全局对象概览
1 | /* |
7. 模块化开发
7.1 模块化规范与实现
1 | 传统非模块化开发有如下的缺点: |
7.2 模块导出与引入
7.2.1 导出方式一:
03.js
1 | var sum = function(a,b){ |
04.js
1 | //引入模块 |
7.2.2 导出方式二:
03.js
1 | var sum = function(a,b){ |
04.js
1 | //引入模块 |
7.2.3 两种导出方式区别
如果要导出单个的成员或者比较少的成员,一般我们使用exports导出;如果要导出的成员比较多,一般我们使用module.exports的方式。
这两种方式不能同时使用,exports与module的关系:
module.exports = exports = {};
7.3 模块导出机制分析
05.js
1 | /* |
06.js
1 | /* |
7.4 模块成员导出:global
07.js
1 | var flag = 123; |
08.js
1 | require('./07.js'); |
7.5 模块加载规则
已经加载的模块会缓存
模块文件的后缀3种情况:.js .json .node
上述三种模块的加载优先级(不加文件后缀时的优先级):.js -> .json -> .node
data.json
1 | { |
data.js
1 | exports.showInfo = function(){ |
08.js
1 | var m = require('./data'); |
7.6 模块分类
- 自定义模块
- 系统核心模块
- fs 文件操作
- http 网络操作
- path 路径操作
- querystring 查询参数解析
- url url解析
- ……
8. Buffer基本操作
Buffer对象是Node处理二进制数据的一个接口。它是Node原生提供的全局对象,可以直接使用,不需要require(‘buffer’)。Buffer本质上就是字节数组。
8.1 实例化
- Buffer.from(array)
- Buffer.from(string)
- Buffer.alloc(size)
1 | let buf = new Buffer(5);//不推荐 |
8.2 功能方法
- Buffer.isEncoding() 判断是否支持该编码
- Buffer.isBuffer() 判断是否为Buffer
- Buffer.byteLength() 返回指定编码的字节长度,默认utf8
- Buffer.concat() 将一组Buffer对象合并为一个Buffer对象
1 | console.log(Buffer.isEncoding('utf8')); ->true |
8.3 实例方法
- write() 向buffer对象中写入内容
- slice() 截取新的buffer对象
- toString() 把buf对象转成字符串
- toJson() 把buf对象转成json形式的字符串
1 | let buf = Buffer.alloc(5); |
9. 核心模块API
9.1 路径操作
1 | //引入path模块 |
9.2 文件操作
9.2.1 文件信息获取
1 | const fs = require('fs'); |
9.2.2 读文件操作
1 | const fs = require('fs'); |
9.2.3 写文件操作
1 | const fs = require('fs'); |
9.2.4 目录操作
1 | /* |
10. 包
多个模块可以形成包,不过要满足特定的规则才能形成规范的包
10.1 npm
NPM (node.js package management)全球最大的模块生态系统,里面所有的模块都是开源免费的;也是Node.js的包管理工具。官方网站
10.2 npm包安装方式
本地安装
本地安装的包在当前目录下的node_modules里面,本地安装的包一般用于实际的开发工作
全局安装-g
全局安装的包位于Node.js环境的node_modules目录下,全局安装的包一般用于命令行工具
10.3 解决npm安装包被墙的问题
10.3.1 –registry
1 | npm config set registry=https//registry.npm.taobao.org |
10.3.2 cnpm
淘宝NPM镜像,与官方NPM的同步频率目前为10分钟一次
官网: http://npm.taobao.org/
1 | npm install -g cnpm –registry=https//registry.npm.taobao.org |
10.3.3 nrm
作用:修改镜像源
项目地址:https://www.npmjs.com/package/nrm
1 | 安装:npm install -g nrm |
10.4 npm常用命令
1 | 开发环境(平时开发使用的环境) |
10.4.1 安装包
1 | // 1. 如果没有指定版本号,那么安装最新版本 |
10.4.2 更新包
1 | // 更新到最新版本 |
10.4.3 卸载包
1 | npm uninstall -g 包名 |
10.5 yarn基本使用
类比npm基本使用
yrm:yarn地址管理工具,类似nrm
1 | 安装yarn工具:npm install -g yarn |
11. 自定义包
11.1 包的规范
- package.json必须在包的顶层目录下
- 二进制文件应该在bin目录下
- JavaScript代码应该在lib目录下
- 文档应该在doc目录下
- 单元测试应该在test目录下
11.2 package.json字段分析
- name:包的名称,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含空格
- description:包的简要说明
- version:符合语义化版本识别规范的版本字符串
- keywords:关键字数组,通常用于搜索
- maintainers:维护者数组,每个元素要包含name、email(可选)、web(可选)字段
- contributors:贡献者数组,格式与maintainers相同。包的作者应该是贡献者数组的第一- 个元素
- bugs:提交bug的地址,可以是网站或者电子邮件地址
- licenses:许可证数组,每个元素要包含type(许可证名称)和url(链接到许可证文本的- 地址)字段
- repositories:仓库托管地址数组,每个元素要包含type(仓库类型,如git)、url(仓- 库的地址)和path(相对于仓库的路径,可选)字段
- dependencies:生产环境包的依赖,一个关联数组,由包的名称和版本号组成
- devDependencies:开发环境包的依赖,一个关联数组,由包的名称和版本号组成
11.3 自定义包案例
1 | { |
-------------本文结束感谢您的阅读-------------
本文标题: Node.js(一)
本文链接: https://wgy1993.gitee.io/archives/fb0fa11b.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
