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
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)