网站首页 > 技术文章 正文
模块化的演进过程#
早期模块化完全依靠约定,项目一旦庞大将会维护成本极高
1.基于文件的划分模块的问题
- 污染全局作用域
- 命名冲突问题
- 无法管理模块依赖关系
2.命名空间方式
3.立即执行函数的形式提供私有空间
模块化规范的出现#
目前实现模块化的规范主要有:#
- CommonJS
- CMD
- AMD
- ES6模块(ESmodules)
模块化的好处:#
- 可维护性。 因为模块是独立的,一个设计良好的模块会让外面的代码对自己的依赖越少越好,这样自己就可以独立去更新和改进。
- 命名空间。 在 JavaScript 里面,如果一个变量在最顶级的函数之外声明,它就直接变成全局可用。因此,常常不小心出现命名冲突的情况。使用模块化开发来封装变量,可以避免污染全局环境。
- 重用代码。 我们有时候会喜欢从之前写过的项目中拷贝代码到新的项目,这没有问题,但是更好的方法是,通过模块引用的方式,来避免重复的代码库。我们可以在更新了模块之后,让引用了该模块的所有项目都同步更新,还能指定版本号,避免 API 变更带来的麻烦。
CommonJS规范#
commonjs是以同步模式加载模块
- 一个文件就是一个模块
- 每个模块都有单独的作用域
- 通过module.exports导出成员
- 通过require函数载入模块
AMD规范#
异步模式加载模块,是一种前端模块化的临时方案
- AMD使用相对复杂
- 模块JS文件请求频繁
CMD规范#
CMD 即Common Module Definition通用模块定义,CMD规范是国内发展出来的,就像AMD有个requireJS,CMD有个浏览器的实现SeaJS,SeaJS要解决的问题和requireJS一样,只不过在模块定义方式和模块加载(可以说运行、解析)时机上有所不同
模块化标准规范#
模块的化的最佳实践 ESmodules 和 CommonJS
ESmodule是前端最规范的模块化标准,但需要配合构建工具使用(ES6才推出的新标准)
ESmodules特性#
- 自动采用严格模式、忽略 'use strict'
- 每个ESM模块都是单独的私有作用域
- ESM是通过CORS去请求外部JS模块
- ESM的SCRIPT标签会延迟执行脚本
ESmodules导入导出的注意事项#
- 导出的成员并不是字面量对象,只是写法类似
- 导入的语法也类似解构语法,但是并不是解构的意思,只是类似。
- ESMODULES导出的过程中,并不是导出成员,而是把成员的值给你,你并不能修改esmodule内的导出值
- 导入的成员是只读的成员
猜你喜欢
- 2024-10-04 前端开发周报:JS 模块化和web图片优化
- 2024-10-04 前端面试:JavaScript 模块化开发怎么做?
- 2024-10-04 模块化和组件化区别 模块化 组件化 插件化
- 2024-10-04 前端系列——DOS常用命令以及npm的模块化管理
- 2024-10-04 这款模块化Mac Pro帅呆了:前端加入TouchBar
- 2024-10-04 VUE前端工程化、组件化、模块化有自己的理解和总结
- 2024-10-04 JS模块化 - 浅谈 CommonJS require 函数实现
- 2024-10-04 前端模块化(CommonJS) 前端模块化和组件化的理解
- 2024-10-04 好程序员web前端学习路线分享css模块化方案
- 2024-10-04 极简模块化前端UI框架 layui 前端模块化开发框架
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)