• module.exports---exports---export default与import---require区别和联系


     一、弄清基本信息:

    CommonJS规范 ES6语法
    导出模块:module.exports 导出模块:export
    exports export default
    导入模块:require 导入模块:import

    ***module.exports导出对应require导入,export导出对应import导入

    模块化:

      (1)node应用由模块组成,采用CommonJS模块规范。

      (2)根据这个规范,每个文件就是一个模块,有自己的作用域,在一个文件里面顶一个变量、函数、类,都是私有的,对其他文件不可见。

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

    二、module.exports和exports的区别与联系

    // exam.js
    var
    x=1; var addX=function(val){ return val+x; }; module.exports.x=x; module.exports.addX=addX;

    以上代码通过module.exports输出变量x和函数addX

    下面通过require方法加载上面的模块:

    var exam=require('./exam.js');  //使用require引入自定义模块时,一定要加路径(./前缀);系统模块可以直接引入不用前缀
    console.log(exam.x);
    console.log(exam.addX(1));

    其实exports变量是指向module.exports,加载模块实际是加载该模块的module.exports。这等同在每个模块头部,有一行这样的命令:

    var exports=module.exports;
    

     注意:不能直接将exports变量指向一个值,这样等于切断了exports和module.exports的联系

    三、export和export default的区别和联系

    模块功能主要由:export和import构成。export导出模块的对外接口,import命令导入其他模块暴露的接口。

    (1)export和export default就是写法上面有差别,export导出一个个单独接口,export default默认导出一个整个接口。

    (2)使用import命令的时候,用户需要知道所要加载的变量名和函数名,否则无法加载。

    (3)不用知道有哪些具体的暴露接口名,就用export default命令,为模块指定默认输出

    export写法  
    // ex.js
    var sid=001;
    var name="xlx";
    var data="1995";
    
    export {sid,name,data}

    使用export命令定义了模块的对外接口后,其他js文件就可以通过import命令加载这个模块。

    import {sid,name,data} from "./ex.js"
    

     export default 写法

    // export-default.js
    
    export default function(){
        console.log("foo");
    }
    
    //或者写成:
    function foo(){
          console.log("foo")  
    }
    
    export default foo;

    main.js

    import fn from "./export-default.js";
    
    fn();
    // 报错:Unexpected identifier
    // 第一组
    export default function car() { // 输出
      // ...
    }
    import car from 'car'; // 输入 // 第二组 export function car2() { // 输出 // ... }; import {car2} from 'car2'; // 输入

    区别:

    (1)export default ===>import不需要大括号(一个模块只能有一个默认输出,所以export default只能使用一次)

    (2)export ===>需要大括号

  • 相关阅读:
    对于Python中self的看法
    SpringBoot整合MyBatis-Plus快速开始
    Hive原理--体系结构
    Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试
    记录:更新VS2019后单元测试运行卡住无法运行测试的问题。
    黑帽来源页劫持代码以及如何防范
    OFFICE 2010 每次打开提示安装的问题
    Mssql 查询某记录前后N条
    验证邮箱正则表达式,包含二级域名邮箱,手机号正则表达式支持170号段
    删除TFS上的团队项目
  • 原文地址:https://www.cnblogs.com/codexlx/p/12494322.html
Copyright © 2020-2023  润新知