美文网首页
关于import & export; require & def

关于import & export; require & def

作者: 苦苦修行 | 来源:发表于2018-07-27 23:33 被阅读0次

    首先明确几点:

    • ES6的模块编程:import & export
    • ES5的模块编程:require & definerequire & exports/module.exports
    • ES6的模块编程思想是:编译时将import进来的模块导入进来整合到一起;import是编译时调用,所以必须放在文件开头(可以认为是静态的)
    • ES5的模块编程思想是:代码运行时,根据require的需求,将模块请求进来。所有require语句可以放在代码的任何地方(可以认为是动态的)
    • ES6之前的模块规范分为两种:同步 和 异步;对应的技术标准主要为:CommonJSAMD
    • CommonJS对应的是 require & exports/module.exports,典型代表是Node.js;
    • AMD 对应的是 require & define,典型的代表是 require.js

    注意事项:

    AMD定义模块时,define方法的第三个参数,即回调方法中也可以使用 requireexportsexports就是你导出的模块对象,所以,你可以将属性或方法挂载到exports

    define("alpha", ["require", "exports"], function (require, exports) {
        var app_root_1 = require("./components/app/app-root");
        exports.IonicApp = app_root_1.IonicApp;
    });
    

    像上面这个例子,在回调函数中又依赖了其他模块(./components/app/app-root),导出的模块alpha其实就是exports对象,上面挂载了IonicApp属性


    以上几点通过这么几个关键词串起来:ES5、ES6、同步、异步、静态、动态


    引申知识点:

    Node.js(服务端)使用 CommonJS 来实现模块,浏览器端使用 AMD 来实现模块,为啥?

    答:

    ES5的模块是动态请求的

    ② 在服务端,模块都存储在本地硬盘中,虽然是动态请求模块,但是请求非常
    快,时间延迟可以忽略不计,所以使用同步编程(CommonJS

    ③ 在浏览器端,动态请求模块需要访问网络,时间延迟不可不考虑,必须使用异步编程(AMD

    我想在浏览器端也是用CommonJS编程,怎么办?请阅读使用Browserify来实现CommonJS的浏览器加载


    延伸阅读:

    参考文献:

    相关文章

      网友评论

          本文标题:关于import & export; require & def

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