CommonJS
为服务器提供的一种模块形式的优化
CommonJS模块建议指定一个简单的用于声明模块服务器端的API,并且不像AMD那样尝试去广泛的操心诸如io,文件系统,约定以及更多的一揽子问题。
这种形式为CommonJS所建议--它是一个把目标定在设计,原型化和标准化Javascript API的自愿者工作组。迄今为止,他们已经在模块和包方面做出了批复标准的尝试。
详细:https://www.w3cschool.cn/zobyhd/1ldb4ozt.html
规范
根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性;Node.js是commonJS规范的主要实践者;
语法
导入:require()
导出:module.exports、exports
模块输出
模块只有一个出口,module.exports对象,我们需要把模块希望输出的内容放入该对象;输出的是一个值的拷贝
加载模块
加载模块使用require方法,该方法读取一个文件并执行,返回文件内部的module.exports对象;加载的是整个模块,即将所有的接口全部加载进来。
module.exports和exports区别
所有的exports收集到的属性和方法,都赋值给了module.exports。当然,这有个前提,就是module.exports本身不具备任何属性和方法。如果,module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。module.exports 初始值为一个空对象 {};exports 是指向的 module.exports 的引用;require() 返回的是 module.exports 而不是 exports
ES6模块化
背景
在之前的javascript中是没有模块化概念的。如果要进行模块化操作,需要引入第三方的类库。随着技术的发展,前后端分离,前端的业务变的越来越复杂化。直至ES6带来了模块化,才让javascript第一次支持了module。
模块
模块可以理解为函数代码块的功能,是封装对象的属性和方法的javascript代码,它可以是某单个文件、变量或者函数。
在ES6中每一个模块即是一个文件,在文件中定义的变量,函数,对象在外部是无法获取的。如果你希望外部可以读取模块当中的内容,就必须使用export来对其进行暴露(输出)。
具体使用方式
1、默认导出与导入
默认导出语法 export default 默认导出成员的名称
默认导入语法 import 名称 from ‘路径’
每个模块中,只允许使用唯一的一次 export default,否则会报错!
2、按需导出 与 按需导入
默认导出语法 export 变/常量声明 变/常量名 = 变/常量值
默认导入语法 import { 名称 } from ‘路径’
每个模块中,允许使用多次 export !