---
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
```
加載機制 (來自網絡)

### 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年年終總結