Es6 nodejs模块化规范 Module

152 阅读3分钟

Es6nodejs模块化规范

模块化规范介绍

1.什么叫模块化?(模块 == js文件)

 一个js文件`可以`引入另一个js文件中的数据, 这种开发方式就叫做模块化开发。

2.模块化开发好处?

(1)将功能分离出来

   一个js文件只负责处理一个功能,这样做的好处是业务逻辑清晰,便于维护

(2)按需导入

   用到哪一个功能,就导入哪一个js文件。模块化开发是`渐进式框架`的共同特征。

(3)避免变量污染

   一个js文件(模块),都是一个独立的作用域。 互不干扰,不用考虑变量名冲突问题。

CommonJS规范实现模块化语法

CommonJS规范只有两句话

 1.模块必须要使用require()导入

 2.模块必须要使用module.exports导出

  这两个语法都是nodejs环境自带的全局语法
  

模块缓存机制

  1.当一个模块第一次会加载时,nodejs会执行里面的js代码,并且导出模块
  2.nodejs会将导出的模块放入缓存中
  3.当重复导入一个模块的时候,nodejs会先从缓存中读取模块。 如果缓存中有,就从缓存读取。缓存没有重复步骤1
  

image.png

nodejs三种模块及require()加载原理

1.nodejs有三种模块

   第一种: 核心模块、内置模块

       nodejs作者写的,这些模块js文件会随着安装nodejs的时候一起安装。因此我们可以直接使用,而无需下载。

           例如: fs 、path、http都是核心模块

   第二种:第三方模块

       npm官网上面的模块,这些都是大佬写的模块。需要下载后使用

           例如: express、cors、bod-parser

   第三种:自定义模块

       我们自己写的js文件

2.require('文件路径')加载原理

   (1)自定义模块:必须要写文件路径, `require()`会得到这个模块里面的 `module.exports` 对象

   (2)第三方模块 :写模块名。 nodejs会自动从你的node_module文件夹里面去找这个模块的名字,然后执行模块里面的`index.js`代码,得到里面的`module.exports`

       如果当前目录没有module.exports就会从上级目录找,以此类推。一直找到你的磁盘根目录。 还找不到就会报错提示 模块不存在(有点类似于变量作用域就近原则)

   (3)核心模块:写模块名。 nodejs会自动从你的node安装包路径里面去找。

默认导出“入”

const name = '张三'
const age = 20
const eat = str=>{
    console.log(`今天晚上吃${str}`)
}

//1.默认导出 : 只能导出一次
/* 注意点:默认导出只能导出一次*/
export default {
    name,
    age,
    eat
}


//2.按需导出 : 可以导出多次
/* 注意点: 按需导出 需要在声明的时候就导出 */
export const num = 10
export const str = 'abc'

按需导出“入”

//1.默认导入
/* 注意点:默认导入变量名可以随便定义 */
import a from './tools.js'
console.log(a)

//2.按需导入
/* 注意点:
(1)按需导入有 {} , 默认导入没有 {}
(2)按需导入的变量名不能随便写,必须要和导出的是一样的
(3)如果要修改按需导入的变量名,可以使用as关键字
    变量名 as 要修改的变量名
*/
import {num,str as b } from './tools.js'
console.log(num)
console.log(b)