请问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%
有没有不依赖embedding向量的RAG技术?
有没有支持实时打断语音通话并后台帮你执行任何的ai模型?
开源ai大模型文件格式GGUF、MLX、Safetensors、 ONNX 有什么区别?
出海挣钱支付收款PayPal、Wise 、PingPong、Stripe如何选择?
如何实现类似google的图片隐形水印添加和识别技术?
linux上如何运行任意windows程序?
ai能写出比黑客还厉害的零日漏洞等攻击工具攻击任意软件系统工程?
js如何获取浏览器的音频上下文指纹、Canvas指纹、WebGL渲染特征?
为啥ai开始抛弃markdown文本,重新偏好html文本了?
网站有没有办法鉴别访问请求是由ai操控chrome-devtools-mcp发出的?


