** 聊聊CommonJS(服务器端)与ES6 Module(浏览器端)的使用与区别
 第一种: ES6 Module
      在ES6模块化出现之前,前端已经尝试了AMD,CMD等规范,这些规范不能同时应用于浏览器和服务器端。
      ES6,是浏览器和服务器端通用的规范化开发规范,模块导入是值的引用,是静态的。
          每个js文件都是一个独立的模块
          导入模块成员,使用import关键字。导入需要用一对 {} 大括号来接收大于一个的我们需要导入的方法或函数,而且必须与导出时的名称一模一样
          暴露模块成员使用 export关键字。     
                // B.js
                function show() {
                console.log(‘show方法被执行‘)
                }
export default show
                // A.js
                import show from ‘./B.js‘
                show()  // show方法被执行
         需要用babel配置,在.babel文件中
            const presets = [ 
                    ["@babel/env", { 
                         targets: { 
                         edge: "17", 
                         firefox: "60", 
                         chrome: "67", 
                         safari: "11.1" 
                         } 
                    }] 
                    ]; 
               module.exports = { presets }; 
    第二种: CommonJS 
        用于服务器端,nodejs中用,导入的是值的拷贝,同步加载。
        模块分为 单文件模块 与 包
        模块成员导出: module.exports 和 exports
        模块成员导入: require(‘模块标志符‘)       
        // B.js
        function show() {
        console.log(‘show方法被执行‘)
        }
        module.exports = {
        show
        }
        // A.js
        const bModule = require(‘./B.js‘)
bModule.show() // show方法被执行
** 模块化
有人可能会想到,加载这个文件,也可能造成网页失去响应。解决办法有两个,一个是把它放在网页底部加载,另一个是写成下面这样:
<script src="js/require.js" defer async="true" ></script>
async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。
原文:https://www.cnblogs.com/halo-vv/p/14835750.html