CommonJS
浏览器不能兼容,因为require是同步的,需要等待的,如果我们去使用同步获取服务器信息,那么浏览器将会“假死”状态,并且浏览器也没有module、exports、require、global这四个node变量
CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)},运行时加载
转换工具: Browserify
AMD
异步模块定义,就是为了解决commonjs同步等待的问题,使用异步加载,不影响后面代码的执行, AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
RequireJS就是实现了AMD规范,比如说在项目中使用require.js,然后设置主入口去异步加载别的模块
CMD/AMD
AMD | 速度快 | 会浪费资源 | 预先加载所有的依赖,直到使用的时候才执行
CMD | 只有真正需要才加载依赖 | 性能较差 | 直到使用的时候才定义依赖
CommonJS和ES6模块的区别
- CommonJS模块是运行时加载,ES6 Modules是编译时输出接口
- CommonJS输出是值的拷贝;ES6 Modules输出的是值的引用,被输出模块的内部的改变会影响引用的改变
- CommonJs导入的模块路径可以是一个表达式,因为它使用的是require()方法;而ES6 Modules只能是字符串
- CommonJS this指向当前模块,ES6 Modules this指向undefined
- 且ES6 Modules中没有这些顶层变量:arguments、require、module、exports、__filename、__dirname
require
- CommonJs的语法(AMD规范引入方式),CommonJs的模块是对象。
- 运行时加载整个模块(即模块中所有方法),生成一个对象,再从对象上读取它的方法(只有运行时才能得到这 个对象,不能在编译时做到静态化),理论上可以用在代码的任何地方
- require是赋值过程,把require的结果(对象,数字,函数等),默认是export的一个对象,赋给某个变量(复制或浅拷贝)
import
- es6的一个语法标准(浏览器不支持,本质是使用node中的babel将es6转码为es5再执行,import会被转码为require),es6模块不是对象
- 是编译时调用,确定模块的依赖关系,输入变量(es6模块不是对象,而是通过export命令指定输出代码,再通过import输入,只加载import中导的方法,其他方法不加载),import具有提升效果,会提升到模块的头部(编译时执行)
- import是解构过程(需要谁,加载谁)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!