一、模块化的理解
1.什么是模块?
2.模块化的好处
- 避免命名冲突(减少命名空间污染)
- 更好的分离, 按需加载
- 更高复用性
- 高可维护性
二、模块化规范
模块化规范有Commonjs、AMD、CMD、ES6模块化
这篇文章主要对Commonjs和ES6模块化进行一个汇总整理(在nodejs上运行)
1.ES6模块化(静态加载,编译时加载)
ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。
ES6模块化语法
export命令用于规定模块的对外接口,即模块的暴露
import命令用于输入其他模块提供的功能,即模块的导入。
①单个属性的导出、导入
//单个属性的导出 文件名为 a.js
export let a = 1;
export function count(){
console.log(++a);
}//引用 文件名为 index.js
import {a,count} from './a.js'
console.log(a) // 1
count() // 2
②列表和重命名的导出、导入
//暴露模块 文件名 a.js
let firstName = "zhang"
let lastName = "xiaoxiao"
//列表导出
export {firstName , lastName}
//重命名导出
export { firstName as first, lastName as last}
//引入模块 文件名 index.js
//列表引入
import { firstName , lastName } from "./a.js";
console.log("列表"+firstName,lastName); //列表zhang xiaoxiao
//重命名引入
import { first , last } from "./a.js";
③默认导出 export default function foo(){ }; / export default {}
使用import命令的时候,我们需要知道所要加载的变量名或函数名,否则无法加载。为了方便,能使我们不用阅读文档就能加载模块,就要用到export default命令,为模块指定默认输出。
//文件名 a.js 模块暴露
export default function foo(){
console.log("default 默认导出");
}
import fun from "./a.js"
fun() // default 默认导出
//这里的fun并不是固定的,我们可以给任意的变量名来接收这个模块
④导出所有模块 import * as obj(自定义) from '路径'
//文件名 index.js
import * as obj from '.a.js'; //as 后面obj 也是可以自定义的变量名来接收
console.log(obj);
//打印结果 [Module: null prototype] {
a: 1,
count: [Function: count],
default: [Function: default],
first: 'zhang',
firstName: 'zhang',
last: 'xiaoxiao',
lastName: 'xiaoxiao'
}
⑤ 运行模块 类似于script标签的导入形式
//文件名 index.js
import "./a.js" //可以运行a.js中的js代码
另外,①-④的引入也可以运行目标文件中的js代码(console.log()等都可以运行),并且,当在运行index文件时,console.log()命令先被打印。
2.Commonjs(运行时加载)
//导出 文件名 b.js
let a =1;
let add =()=>{
++a
}
module.exports = {
a,
add
}
//导入 文件名 index.js 要运用 require() 命令
let obj = require('./modules/b')
console.log(obj);
//对象的解构形式
let {a,add} = require('./modules/b')
console.log(a,add);
三、ES6 模块与 Commonjs 模块的差异
它们有两个重大差异:
① Commonjs 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
② Commonjs 模块是运行时加载,ES6 模块是编译时输出接口。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。