注意:
若是是单独用 export 来导出的。
必须使用 import {xxx} from 'xxx'; 的方式来导入。es6
模块的功能主要由 export 和 import 组成。 每个模块都有本身单独的做用域,模块之间的相互调用关系是经过 export 来规定模块对外暴露的接口,经过 import 来引用其余模块提供的接口。同时还为模块创造了命名空间,防止函数的命名冲突。bash
ES6容许在一个模块中使用 export 来导出多个变量或函数。模块化
导出变量:函数
//test.js
export var name = 'Rainbow';
export let username = 'Jack';
复制代码
ES6不只支持变量的导出,也支持常量的导出。ui
export const GET_PRODUCT_LIST = 'GET_PRODUCT_LIST'; // 获取商品列表
复制代码
ES6将一个文件视为一个模块,上面的模块经过 export 向外输出了一个变量。一个模块也能够同时往外面输出多个变量。spa
//test.js
let username = 'Rainbow';
let age = '24';
export {username, age};
复制代码
导出函数:code
//common.js
export function myClick(options){
return options;
}
复制代码
定义好模块的输出之后,就能够在另一个模块经过 import 引用。对象
import { myClick } from 'common'; //common.js
import { username, age } from 'test'; //test.js
复制代码
一条 import 语句能够同时导入默认函数和其余变量。接口
import defaultMethod, { otherFunction } from 'xxx.js';
复制代码
咱们先来建立一个 test.js 文件,来对这一个变量进行输出:作用域
export let myName = "laowang";
复制代码
而后能够建立一个 index.js 文件,以 import的形式将这个变量进行引入:
import { myName } from './test.js';
console.log(myName); //laowang
复制代码
若是要输出多个变量能够将这些变量包装成对象进行模块化输出:
let myName = "laowang";
let myAge = 90;
let myfn = function () {
return "我是" + myName + "!今年" + myAge + "岁了";
}
export {
myName,
myAge,
myfn
}
/*********************接收的代码调整为*******************/
import { myfn,myAge,myName } from "./test.js";
console.log(myfn()); //我是laowang!今年90岁了
console.log(myAge); //90
console.log(myName); //laowang
复制代码
若是你不想暴露模块当中的变量名字,能够经过as来进行操做:
let myName = "laowang";
let myAge = 90;
let myfn = function (){
return "我是"+myName+"! 今年"+myAge+"岁了"
}
export {
myName as name,
myAge as age,
myfn as fn
}
/********************** 接收的代码调整为 **********************/
import { fn, age, name } from "./test.js";
console.log(fn()); //我是laowang! 今年90岁了
console.log(age); //90
console.log(name); //laowang
复制代码
也能够直接导入整个模块,将上面的接收代码修改成:
import * as info from "./test.js"; //经过*来批量接收, as来指定接收的名字
console.log(info.fn()); //我是laowang! 今年90岁了
console.log(info.age); //90
console.log(info.name); //laowang
复制代码
默认导出(default export)
一个模块只能有一个默认导出,对于默认导出,导入的名称能够和导出的名称不一致。
/******************* 导出 ******************/
export default function() {
return "默认导出一个方法";
}
/************************ 引入 ********************/
import myFn from "./test.js"; //注意这里默认导出不须要用 {}。
console.log(myFn()); //默认导出一个方法
复制代码
能够将全部须要导出的变量放入一个对象中,而后经过default export进行导出。
/******************* 导出 ******************/
export default {
myFn() {
return "默认导出一个方法"
},
myName: "laowang"
}
/******************** 引入 *****************/
import myObj from "./test.js";
console.log(myObj.myFn(), myObj.myName); //默认导出一个方法 laowang
复制代码
一样也支持混合导出
/******************* 导出 ******************/
export default function() {
return "默认导出一个方法";
}
export var myName = "laowang";
/******************* 引入 ******************/
import myFn, { myName } from "./test.js";
console.log(myFn(), myName); //默认导出一个方法 laowang
复制代码
重命名export 和 import 若是导入的多个文件中,变量名字相同,即会产生命名冲突的问题,为了解决该问题,ES6为提供了重命名的方法,当你在导入名称时能够这样作:
/******************* test1.js *****************/
export let myName = "我来自test1.js";
/******************* test2.js *****************/
export let myName = "我来自test2.js";
/******************* index.js *****************/
import { myName as name1 } from "./test1.js";
import { myName as name2 } from "./test2.js";
console.log(name1); //我来自test1.js
console.log(name2); //我来自test2.js
复制代码
参考: es6中的模块化