美文网首页
ES6学习(一)--- 模块化

ES6学习(一)--- 模块化

作者: lv_H | 来源:发表于2018-03-18 14:25 被阅读0次

    简介

    CommoneJS模块化:CommoneJS为代表(Node应用由模块组成,采用CommonJS模块规范)。其主要特点是语法简洁,模块使用同步加载机制,主要使用在服务器端。

    异步模块定义(AMD):RequireJS为代表。其主要特点是模块使用异步加载,主要使用在浏览器端。

    CommonJS规范

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

    var a = 5;
    var fn = function (value) {
      return value + a;
    };
    module.exports.a = a;
    module.exports.fn = fn;
    

    上面代码通过module.exports输出变量a和函数fn。

    require方法用于加载模块。

    var example = require('./a.js');
    
    console.log(a.a); // 5
    console.log(a.fn(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 来导出、导入模块。

    // a.js
    var a= 'a';
    var b= 'b';
    var c= 123;
    
    export {a, b, c};
    
    

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

    // 写法一
    export var a = 1;
    
    // 写法二
    var a = 1;
    export {a};
    
    // 写法三
    var b = 1;
    export {b as a};
    
    

    export default 命令

    使用export default命令,为模块指定默认输出。

    // a.js
    export default function () {
      console.log('123');
    }
    
    

    export default 和 export 区别:

    1.export与export default均可用于导出常量、函数、文件、模块等

    2.在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用

    3.在一个文件或模块中,export、import可以有多个,export default仅有一个

    4.通过export方式导出,在导入时要加{ },export default则不需要

    注意

    1.使用export导出需要{},与此相对使用import导入也需要{}

    2.使用export default 导出不需要{},与此相对使用import导入也不需要{}

    支持状况

    ES6为JavaScript带来了模块机制,但ES6的模块机制在当前所有的浏览器及Node.js中均不受支持。但我们可以通过一些编译器来对ES6语法进行转换,从而利用这些新特性给我们项目带来便利:

    Babel-Babel是一个ES6语法转换为ES5语法的转换器,其支持对ES6模块语法的转换,包括:异步加载、状态隔离、顶级命名空间隔离等

    es6-module-transpiler -将ES6模块编译为AMD规范或者CommonJS规范的模块

    ES6 module loader-能支持动态加载ES6风格的模块

    Traceur-Google开发的JS转换编译器,目的在于支持更多的JavaScript特性包括ES6模块

    相关文章

      网友评论

          本文标题:ES6学习(一)--- 模块化

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