前端模块化:CommonJS,AMD,CMD,ES6 Module

模块化开发能提高代码复用率,方便代码管理。

CommonJS

主要用于服务器端,比如Node
module.exports定义当前模块对外输出的接口,用require加载模块。
require参数:
引用核心模块时,不需要写路径,直接写需引用的模块名即可
引用自定义的模块时,参数需写路径,可省略.js

AMD

主要用于浏览器环境

CMD

主要用于浏览器环境

ES6 Module

模块功能主要由两个命令构成:exportimportexport命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

模块化使用对比

CommonJS 和 ES6 Module

  1. CommonJS 模块输出的是值的拷贝,ES6 模块输出的是值的引用
    • CommonJS 模块输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化就影响不到这个值。
    • ES6 模块输出的是值的引用,模块里面的内容如果发生变化,输出的内容也会随之改变。
  2. CommonJS 模块是运行时加载,ES6 模块是编译时输出接口
    • 运行时加载:CommonJS 模块就是对象;即在输入时是先加载整个模块,生成一个对象,然后再从这个对象上面读取方法,这种加载称为“运行时加载”。
    • 编译时加载:ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,import时采用静态命令的形式。即在import时可以指定加载某个输出值,而不是加载整个模块,这种加载称为“编译时加载”。

AMD 和 CMD

AMD:在最开始声明依赖模块,加载模块后马上运行模块化内代码,不管回调函数是否要用到相关模块
CMD:在需要时声明依赖模块、加载模块
参考:
https://juejin.im/post/5aaa37c8f265da23945f365c#comment

你可能感兴趣的:(前端模块化:CommonJS,AMD,CMD,ES6 Module)