1.NodeJS运行的是CommonJS模块,但是浏览器中不能运行CommonJS,就是我们写的代码使用到了module.export和require来分发JS文件,这种叫做CommonJS模块,因为NodeJS自己定义了四个变量module,exports,require,global,由于浏览器中没有这四个变量所以没法解析(实际上这四个变量的作用是全局变量,module.exports存储我们的JS导出的变量,然后通过require来加载存储再里面的变量)
从而达到文件分发的目的。
CommonJS是同步加载,适用于服务器端的模块加载,因为大家在文件的时间就是等待机器读取的时间,但是浏览器不行,他服务端获取文件还取决于网速的快慢,一旦使用同步等待的过程将处于假死状态,所以出来了AMD规范,异步加载模块。
AMD比较适合浏览器环境。目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。
browerify 就是这么实现的
,browerify 将所有模块放入一个数组,id 属性是模块的编号,source 属性是模块的源码,deps 属性是模块的依赖。
因为 main.js 里面加载了 foo.js,所以 deps 属性就指定 ./foo 对应1号模块。执行的时候,浏览器遇到 require(’./foo’) 语句,就自动执行1号模块的 source 属性,并将执行后的 module.exports 属性值输出。
在理解require.js 参考另一篇文章:https://blog.csdn.net/lengyue1084/article/details/78284518?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-5.no_search_link&spm=1001.2101.3001.4242.5
简单来说就是 下载require.js 这个资源,有个主程序的入口,main.js
使用define定义资源和依赖,使用require来加载资源,NodeJs是相同的原理,只不过是被隐式化了