js的模块规范
2020-04-17 本文已影响0人
海豚先生的博客
CommonJS规范
- node语言使用的规范,用于服务端, CommonJS 模块输出的是一个值的拷贝。
- 每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。所有代码都运行在模块作用域,不会污染全局作用域。
- 模块可以多次加载,只会在第一次加载时运行一次,然后运行结果就被缓存了,加载方式是整体加载。
- 模块加载的顺序,按照其在代码中出现的顺序,即同步加载。
- CommonJS模块是对象,是运行时加载,运行时才把模块挂载在exports之上(加载整个模块的所有)
- vue.runtime.common.js vue的cjs版本
- 用法:
导出使用module.exports.fn = function(){},也可以exports.obj = {}
module.exports === exports
引入使用require('xxx')
ES Module规范
- ES6 模块输出的是值的引用。
- 使用export或export default 显示指定输出,再通过import输入。
- 此方式为编译时加载。用于服务器和浏览器。
- 该类型模块不是对象。
- (构建工具使用,只包含运行时) vue.runtime.esm.js
- (浏览器使用,完整版本)用于在现代浏览器中通过 <script type="module"> 直接导入。
UMD 规范
- CommonJS和AMD规范的糅合,还兼容全局引用的方式
- UMD 使得你可以直接使用 <script> 标签引用
AMD规范(异步模块定义)
- RequireJS是一个工具库,主要用于客户端(浏览器)的模块管理。它的模块管理遵守AMD规范,实现异步或动态加载。
- 定义模块:define(id?, dependencies?, factory)。加载模块:require([module], factory)
- require.js的诞生,就是为了解决这两个问题:
1)实现js文件的异步加载,避免网页失去响应;
2)管理模块之间的依赖性,便于代码的编写和维护。
CMD规范(通用模块定义)
- CMD是 SeaJS 在推广过程中对模块定义的规范化产出。
- CMD推崇依赖就近,AMD推崇依赖前置。
- 定义模块:define(factory)。加载模块:require('xxx')