js在之前的版本中是不支持模块的概念的,一般我们在开发中为了我们的的项目能够多人协作开发,并且每个人定义的变量不会被他人所覆盖,我们会通过一些方式进行控制
- 把我们的代码写到一个自执行的函数中,然后在函数中定义我们的变量名和方法名,然后我们把这些方法和变量存到一个对象中,最后通过一个对象名把它挂载到window对象上,供外界使用。这种情况虽然解决了大部分的命名冲突问题,但是还会有冲突的出现,他也没有真正的实现模块化。
- 后来一些js社区出现了一些模块化的解决方案,require.js、sea.js
ES6的真正意义上规范了模块化。
它提供两个方法,导入模块import、导出模块export,导入导出模块也分为很多种
导出模块
分别导出模块,语法:
export function fun(){
console.log('function');
}
export const a = '我是字符串';
export class Person{
constructor(j){
this.name = j.name,
this.age = j.age;
}
}
统一导出模块语法:
function fun(){
console.log('function');
}
const a = '我是字符串';
class Person{
constructor(j){
this.name = j.name,
this.age = j.age;
}
}
export {fun, a, Person};
export {fun as abc, b, Person}
默认导出
export default {
fun: function(){
console.log('fun')
},
a: '我是字符串',
person: class Person{
constructor(j){
this.age = j.age;
this.name = j.name;
}
}
}
模块的导入
统一导入,通用导入方式
import * as module_1 from './module_1.js';
import * as module_2 from './module_2.js';
import * as module_3 from './module_3.js';
console.log(module_1);
console.log(module_2);
console.log(module_3);
此导入方式可以导入上边所有导出的写法,导入的是所有导出的一个结合,
分别导入,结构赋值导入
import {fun, a, Person} from './module_1.js';
import {fun as fun1, a as a1, Person as person1} from './module_2.js';
import { default as module3} from './module_3.js';
简单导出,只是针对默认导出方式
import module3 from './module_3.js';
模块导入导出的使用
ES6的模块导入导出,只有现在的新版本chrome浏览器支持这种写法,同时也可以使用script直接引入,引入方式
<script src="main.js" type="module"></script>
|