美文网首页
es6模块化导出(export)导入(import)的用法

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

作者: 回忆不死我们不散 | 来源:发表于2020-03-27 16:08 被阅读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

    相关文章

      网友评论

          本文标题:es6模块化导出(export)导入(import)的用法

          本文链接:https://www.haomeiwen.com/subject/fbaluhtx.html