commonjs与ES6模块化使用区别

34 阅读2分钟

什么是模块化?就是将一个复杂的程序根据一定的规则(规范)封装成几个文件,并进行组合在一起,这些单独的文件就模块化。

模块化能够做到什么:

  • 避免命名冲突,减少命名空间污染
  • 更好的分离不同功能的代码,按需加载
  • 更高的复用性和更好的维护性

commonjs

  • 暴露模块:暴露的是一个exports对象
    • 方式1:module.exports = value
    • 方式2:exports.属性名 = value
  • 引入模块:
    • 方式:require('xxx')。
      • 引入的如果是第三方包,则xxx为第三方模块名。
      • 如果引入的是自定模块,则xxx为文件路径
      • 语法:let 变量名 = require('包名或文件路径'),这时变量保存的就是一个对象

ES6

需要打包工具处理成浏览器识别的代码 bable:该包可以将ES6语法转义成ES6模块

  • 暴露模块:export
    // 暴露的语法1
    // 在同一个文件中分别暴露每一个成员
    export function fun(){}
    export function fun1(){}
    
    // 暴露的语法2
    // 将要暴露的成员存入一个对象中暴露
    function fun(){}
    function fun1(){}
    exprot {fun, fun1}
    
    // 上面两种暴露方式,在引入模块时,要使用结构赋值的方式引入使用,就是要使用哪个成员再解构哪个成员使用即可,语法:
    import {fun, fun1} from '文件路径'
    
    // 暴露的语法3 默认暴露,在同一个文件中 export default 只能有一个
    export default value(任意数据)
    // 默认暴露的引入方式
    // 一般为自定义模块的文件名,且首字母大写,保存的是一个对象,可以通过 .属性名访问对象的属性或方法
    import xxx from '文件路径'
  • 引入模块:import xxx from 'yyy'
    • 自定义模块:yyy为文件路径,xxx,一般为自定义模块的文件名,且首字母大写,保存的是一个对象,可以通过 .属性名 访问引入成员的属性或方法
    • 引入第三方包,则 xxx 一般为第三方模块的名称,yyy为npm下载的包名