We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JS模块化大概有三种主流的方式,包括历史上存在过的,但是目前已经很少使用的。 分别为:CMD(sea.js)、AMD(require.js)、CommonJS(nodeJs) CMD、AMD、CommonJS是三种模块化的规范。括号内的则是对应该规范的实际实现。 除了这三种之外,目前还存在ES6中的import与export规范。只是目前除了在NodeJs比较高的版本中有实验性质的实现之外,并无其他实现。而我们在代码中使用它的时候,都是经过了babel的编译,转换成了require方法。(该require具体是cmd实现,还是amd实现我就不清楚了,没有深入研究)
由于CommonJs是NodeJs在客户端的模块化方式,所以它加载文件是通过IO同步读取文件内容的。 原理大概为: 读取文件后得到该Js文件的内容字符串。用Function构造函数包裹该字符串后调用执行,得到返回结果。
AMD规范对应的是requireJs。由于CommonJs是在node端同步加载模块,这样的方式必然不能被浏览器所接受。故而,AMD与CMD都是模块异步加载的的相关规范。 那么AMD与CMD,seaJs与requireJs有什么区别呢? 关于规范具体细节的区别,例如define、require等api的细节不在此描述。仅说一下他们最大的区别。 使用requireJs去require一个模块的时候,requireJs会等待所有的依赖全部被加载结束后,以回调的方式去调用你的业务代码。即,他是先执行的依赖代码,再执行的业务代码。 而seaJs则不同,每当运行你的业务代码时,seaJs都会通过正则去匹配你的代码中是否有require关键字。如果有,则异步加载所有的依赖模块。但是,只有等业务代码运行到require方法时,才真正的执行之前加载的模块代码。即,需要使用依赖模块的时候,才执行依赖模块的代码。
值得一提的是,在CMD与CommonJs中,export都是module.export的引用。所以,对export的重新赋值,会导致module.export上并无想要的内容。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
JS模块化大概有三种主流的方式,包括历史上存在过的,但是目前已经很少使用的。
分别为:CMD(sea.js)、AMD(require.js)、CommonJS(nodeJs)
CMD、AMD、CommonJS是三种模块化的规范。括号内的则是对应该规范的实际实现。
除了这三种之外,目前还存在ES6中的import与export规范。只是目前除了在NodeJs比较高的版本中有实验性质的实现之外,并无其他实现。而我们在代码中使用它的时候,都是经过了babel的编译,转换成了require方法。(该require具体是cmd实现,还是amd实现我就不清楚了,没有深入研究)
CommonJs
由于CommonJs是NodeJs在客户端的模块化方式,所以它加载文件是通过IO同步读取文件内容的。
原理大概为:
读取文件后得到该Js文件的内容字符串。用Function构造函数包裹该字符串后调用执行,得到返回结果。
AMD CMD
AMD规范对应的是requireJs。由于CommonJs是在node端同步加载模块,这样的方式必然不能被浏览器所接受。故而,AMD与CMD都是模块异步加载的的相关规范。
那么AMD与CMD,seaJs与requireJs有什么区别呢?
关于规范具体细节的区别,例如define、require等api的细节不在此描述。仅说一下他们最大的区别。
使用requireJs去require一个模块的时候,requireJs会等待所有的依赖全部被加载结束后,以回调的方式去调用你的业务代码。即,他是先执行的依赖代码,再执行的业务代码。
而seaJs则不同,每当运行你的业务代码时,seaJs都会通过正则去匹配你的代码中是否有require关键字。如果有,则异步加载所有的依赖模块。但是,只有等业务代码运行到require方法时,才真正的执行之前加载的模块代码。即,需要使用依赖模块的时候,才执行依赖模块的代码。
值得一提的是,在CMD与CommonJs中,export都是module.export的引用。所以,对export的重新赋值,会导致module.export上并无想要的内容。
The text was updated successfully, but these errors were encountered: