模块化:将某段独立功能的代码封装为一个模块,在其他模块或代码中导入使用。
js发明之初,只是一门简单的脚本语言,仅仅用于编写网页脚本,所以没有模块化功能。
在nodejs中,执行的代码都是本地的,所以nodejs实现了模块化功能。使用module.exports导出一个模块,使用require导入模块。
浏览器中运行js,代码资源都是从互联网中异步载入的,所以不可能实现同步模块化。只能通过script标签导入多个js文件,
多个js文件实质上是前后拼接在一起运行的。
1,由于代码时拼接在一起运行的,所以多个js文件处于同一个全局作用域,可能形成变量名冲突。
2,如果多个js文件有相互依赖的关系,则必须按照依赖顺序先后导入。
随着网站功能越来越来丰富,网页中的js代码量也越来越多,通过script标签导入js文件的缺点越来越明显,所以前端js也迫切的需要模块化技术。
所以有第三方为前端js实现了模块化功能,例如requirejs和seajs。但是,这些前端模块化技术并不是真正的模块化,而是使用ajax请求实现了类
似模块化的效果。
这些第三方实现的前端模块化技术也有不足之处:
1,这些技术是第三方实现的,并不是官方标准。
2,这些模块化技术对于js源代码的格式有一定要求,必须按照要求的格式书写才能使用模块化。
直到ES6,ECMA才推出了官方标准的js模块化技术。使用export 导出,使用import导入。
但是目前没有任何js平台直接支持es6的模块化标准:
1,浏览器由于载入的代码资源是网络中的,所以不可能实现同步模块化。
2,nodejs中已经有了自己的模块化技术,所以没有再支持es6的模块化标准。