请问AMD、CMD、UMD、CommonJS、ES Module有哪些不同?代码的写法是否一样?
网友回复
1、CommonJS
说到CommonJS,那就的从他的出发点说起了,commonjs的出发点是js没有完善的模块系统。标准库较少,缺少包管理工具,而在node.js兴起之后。能让js在任何地方运行,特别是服务端,也能具备开发大型项目的能力,所以commonjs也就应用而生了。node.js是commonjs的最佳实践者。他有四个重要的环境变量为模块化的实现提供支持:module、exports、require、global.实际使用时,用module.exports定义当前模块对外输出的接口(不推荐直接使用exports),用require加载模块。 commonjs用同步的方式加载模块,在服务端,模块文件够存储在本地磁盘,读取会非常快。所以这样做不会有问题。但是在浏览器端,限制于网络等原因,更合理的加载方式应该是异步加载。 暴露模块:module.exports = value;或者exports.xxx = value; 引入模块:const xxx = require('xxxx') commonjs规范:一个文件就是一个模块,拥有单独的作用域;
普通方式定义的变量、函数、对象属于该模块内;
通过require来加载模块;通过module.exports或者exports来暴露模块中的内容;
注意: 当module.exports和exports同时存在的时候,module.exports会覆盖exports;当模块内全都是exports是,其实就等同于module.exports;
exports其实就是module.exports的子集;
所有代码都是运行在模块作用域,不会污染全局作用域;
模块可以被多次加载,但是只是会在第一次运行的时候加载。然后运行结果就会被缓存了。以后的加载就直接读取缓存的结果;
模块加载的顺序是按照代码出现的顺序同步加载的;
__dirname代表当前模块所在的文件路径
__filename代表当前模块文件所在的文件路径+文件名
2、AMD Asynchronous Module Definition,异步加载模块。他是在一个在浏览器端模块化的开发规范。不是原生js的规范。使用AMD规范进行页面需求开发,需要用到对应的函数库,require.js。 AMD采用异步加载的模块的方式。模块的加载并不会影响到后面语句的执行。所有以来这个模块的语句都定义在一个回掉函数中,等到加载完成之后,这个回掉函数才会执行。 使用require.js来实现AMD规范的模块化:用require.config()指定引用路径。用define()来定义模块用require来加载模块。define('moduleName',['a','b'],function(ma, mb) { return someExportValue; }) require(['a', 'b'], function(m...
点击查看剩余70%
python如何调用openai的api实现知识讲解类动画讲解视频的合成?
html如何直接调用openai的api实现海报可视化设计及文本描述生成可编辑海报?
f12前端调试如何找出按钮点击事件触发的那段代码进行调试?
abcjs如何将曲谱播放后导出mid和wav格式音频下载?
python如何将曲子文本生成音乐mp3或wav、mid文件
python中mp3、wav音乐如何转成mid格式?
js在HTML中如何将曲谱生成音乐在线播放并下载本地?
python如何实现在windows上通过键盘来模拟鼠标操作?
python如何给win10电脑增加文件或文件夹右键自定义菜单?
python如何将音乐mp3文件解析获取曲调数据?