🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
--- 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端口,这种带有含义的端口号开发中不应该使用