---
title: nodejs中的模块与Commonjs规范
date: 2018-12-25 10:12:04
tags: nodejs
---
### 在 node 中的模块
- nodejs 使用的是Commonjs 规范
- 具名的核心模块 ,如 `fs,http,path` 等
- 第三方模块,通过 npm 安装到项目目录 node_modules 中的模块
- 用户自己编写的文件模块, 即 xxx.js(exports 对象挂载导出,require 引入)
- 核心模块: 模块名
- 第三方模块: 模块名
- 自己写的模块:地址
- node中没有全局作用域,只有模块作用域(即每个文件为一个单独的模块)
- 模块化可完全避免变量名冲突以及环境污染问题的
### Commonjs 模块规范
模块间的通信规则
- 使用 `require` 导入
- 使用 `exports` 对象挂载导出或直接赋值给 module.exports 则默认导出该值
```javascript
// exports === module.exports // true 这里的内存地址是相同的 所以导出方法有两种, 最好不要混着用 :)
/*
* 模块内导出多个成员
* 通过挂载的方式进行导出
*/
// a.js
exports.a = '1'
/*
* 同等于 module.exports.a = '1' module 可省略, exports 和 module.exports 使用的是同一个内存地址
* 导出的模块内容永远挂载在 module 下的 exports属性
*/
exports.b = '2'
exports.c = '3'
//等同于
module.exports = {
a:'1',
b:'2',
c:'3'
}
// b.js
const aAccpet = require('./a')
console.log(aAccpet.a)
console.log(aAccpet.b)
console.log(aAccpet.c)
/*
* 模块内导出单个成员
* 通过赋值 module.exports的方式
*/
//a.js 如果存在多个 module.exports赋值则最后一个会覆盖掉前面的赋值
module.exports = (x,y) => x + y
//错误写法
exports = (x,y) => x+y //这种方式会改变 exports 的引用地址,无法挂载到 module.exports上面
//b.js
const aAccept = require('./a')
console.log(aAccept(2,4)) // 6
```
加载机制 (来自网络)
![](https://ws4.sinaimg.cn/large/006tNbRwly1fyjz2w3qcgj30hy0lotbu.jpg)
### ip 地址与端口号
- ip地址用来定位请求计算机
- 端口号用来定位请求应用
- 所有联网的应用程序都会有一个端口号的占用
- 同一个端口号在同一时间内仅能被一个程序使用
- 服务端开发中存在一些默认使用的端口号如 http服务的80端口,这种带有含义的端口号开发中不应该使用
- 01.let-const
- 02.对象数组解构&赋值
- 03.字符串扩展,数值扩展,数组扩展
- 04.数组扩展
- 05.对象扩展
- 06.06.Symbol原始数据类型
- 07.set数据结构
- 08.map数据结构
- 09.proxy与Reflect
- 10.类
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module与模块化
- 15.es6学习总结
- 记录- Vue拖拽实例
- 记录-git使用天坑之分支切换
- node -- session & cookie & localStorge
- 18.12关于前端战略技术储备与问题反馈
- Vue组件通信方式总结以及遇到的问题
- 01.版本回溯以及文件修改
- 02.远端控制
- 03.分支管理
- node 入门 留言板
- nodejs模块与 commonjs 规范
- 19年技术发展规划
- JS错误处理 -> 提升程序健壮性
- Git 基本使用
- 18年年终总结