es6模块化导出(export)导入(import)的用法

2020-03-27  本文已影响0人  回忆不死我们不散

在之前的javascript中是没有模块化概念的。如果要进行模块化操作,需要引入第三方的类库。随着技术的发展,前后端分离,前端的业务变的越来越复杂化。直至ES6带来了模块化,才让javascript第一次支持了module。ES6的模块化分为导出(export)与导入(import)两个模块。

export的用法

在ES6中每一个模块即是一个文件,在文件中定义的变量,函数,对象在外部是无法获取的。如果你希望外部可以读取模块当中的内容,就必须使用export来对其进行暴露(输出)。先来看个例子,来对一个变量进行模块化。我们先来创建一个test.js文件,来对这一个变量进行输出:

export let myName = "Jon";

然后可以创建一个index.js文件,以import的形式将这个变量进行引入:

import { myName } from "./test.js";
console.log(myName); //Jon

如果要输出多个变量可以将这些变量包装成对象进行模块化输出:

let myName = "Jon";
let myAge = 18;
let myfn = function(){
    return "我是"+myName+"!今年"+myAge+"岁了"
}
export {
    myName,
    myAge,
    myfn
}
/******************************接收的代码调整为**********************/
import { myfn, myAge, myName } from "./test.js";
console.log(myfn()); //我是Jon!今年18岁了
console.log(myAge); //18
console.log(myName); //Jon

如果你不想暴露模块当中的变量名字,可以通过as来进行操作:

let myName = "Jon";
let myAge = 18;
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()); //我是Jon!今年19岁了
console.log(age); //19
console.log(name); //Jon

也可以直接导入整个模块,将上面的接收代码修改为:

import * as info from "./test.js"; //通过*来批量接收,as 来指定接收的名字
console.log(info.fn()); //我是Jon!今年18岁了
console.log(info.age); //18
console.log(info.name); //Jon

默认导出(default export)

一个模块只能有一个默认导出,对于默认导出,导入的名称可以和导出的名称不一致。

/******************************导出**********************/
export default function(){
    return "默认导出一个方法"
}
/******************************引入**********************/
import myFn from "./test.js"; //注意这里默认导出不需要用{}。
console.log(myFn()); //默认导出一个方法

可以将所有需要导出的变量放入一个对象中,然后通过default export进行导出

/******************************导出**********************/
export default {
    myFn(){
        return "默认导出一个方法"
    },
    myName: "Jon"
}
/******************************引入**********************/
import myObj from "./test.js";
console.log(myObj.myFn(), myObj.myName); //默认导出一个方法 Jon

重命名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

转载自:https://www.jianshu.com/p/65099c4d597b

CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

var x = 5;
var addX = function (value) {
  return value + x;
};
module.exports.x = x;
module.exports.addX = addX;

上面代码通过module.exports输出变量x和函数addX。
require方法用于加载模块。

var example = require('./example.js');

console.log(example.x); // 5
console.log(example.addX(1)); // 6

exports 与 module.exports

为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令

var exports = module.exports;

于是我们可以直接在 exports 对象上添加方法,表示对外输出的接口,如同在module.exports上添加一样。注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。

ES6模块规范

不同于CommonJS,ES6使用 export 和 import 来导出、导入模块。

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export {firstName, lastName, year};

需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。

// 写法一
export var m = 1;

// 写法二
var m = 1;
export {m};

// 写法三
var n = 1;
export {n as m};

export default 命令

使用export default命令,为模块指定默认输出。
// export-default.js
export default function () {
console.log('foo');
}
CommonJS规范,http://javascript.ruanyifeng.com/nodejs/module.html
ES6 Module 的语法,http://es6.ruanyifeng.com/#docs/module
转载:https://www.cnblogs.com/fayin/p/6831071.html

module变量代表当前模块。这个变量是一个对象,module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象:

module.exports = {};

例子:app.js

module.exports.Name="我是电脑";
module.exports.Say=function(){
  console.log("我可以干任何事情");  
}


//上边这段代码就相当于一个对象

{
  "Name":" 我是电脑",
  "Say"    :function(){
           console.log("我可以干任何事情");  
        }
}

require方法用于加载模块。

var req=require("./app.js");

req.Name      //这个值是 "我是电脑"
req.Say()      //这个是直接调用Say方法,打印出来 "我可以干任何事情"

2、exports 与 module.exports的关系

Node为每个模块提供一个exports变量,指向module.exports。可以通俗的理解为:

var exports = module.exports;

//两个是相等的关系,但又不是绝对相当的关系
例如:
1.module.exports可以直接导出一个匿名函数或者一个值
module.exports=function(){
  var a="Hello World"  
  return   a;
}
但是exports是不可以的,因为这样等于切断了exports与module.exports的联系。
exports=function(){           //这样写法是错误的
  var a="Hello World"        //这样写法是错误的
  return   a;                //这样写法是错误的
}                            //这样写法是错误的

3、export和export default的区别
export是es6引出的语法,用于导出模块中的变量,对象,函数,类。对应的导入关键字是import。

二者的区别有以下几点:

export default在一个模块中只能有一个,当然也可以没有。export在一个模块中可以有多个。
export default的对象、变量、函数、类,可以没有名字。export的必须有名字。
export default对应的import和export有所区别

1.export写法
//./aap.js
var name="我是电脑";
var say=function(){
 console.log("我可以干很多事");
}

export {name,say};

//也可以直接一个一个的export但是必须得有名字
export const a=1;
export function data(){
  return data;
}


//其他页面引入时必须这样
import {name,say} from "./app.js"

2.export default
//app.js
//可以没有函数名字
export default function(){
  return data;
}
//这里export不能这样导出

export default const a=12;
//应该这样导出
const a=12;

export default a
 
 

//其他页面引入时必须这样
import data from "./app.js"

总结:可以看到用export default,import语句不需要使用大括号;用export,对应的import语句需要使用大括号,一个模块只能有一个默认输出,所以export default只能使用一次。
转载:https://www.cnblogs.com/heyushuo/p/8521818.html

es5
https://www.cnblogs.com/ooooevan/p/5897586.html

https://segmentfault.com/a/1190000019399632?utm_medium=referral&utm_source=tuicool

https://www.cnblogs.com/lianglanlan/p/10597700.html

上一篇下一篇

猜你喜欢

热点阅读