模块化和包管理
模块化的本质思想就是分解和聚会。分解契合的是主观规律,而聚会契合的是客观规律。可以说分解和聚合是我们人类认识世界和改造世界的方式。
但是这个分解和聚会是分层次的,最低层面的分解和聚会就是函数层面的。比函数再高一个层面的分解和聚会就是文件(js文件)。文件仅仅是一个更大尺度的分解和聚合。
文件的分解和聚合又带来了新的问题,主要有以下两方面: 1. 全局污染(分解) 2. 依赖混乱(聚合)
模块化的出现就是为了解决文件分解和聚合出现的这些问题。由此又出现了不同的模块化的标准。常见的模块标准有以下:
前四种是社区模块化标准而ESM属于官方的模块化标准。平时开发用的最多的就是CJS和ESM。那么CJS和ESM最核心的区别就两点: 1. 来源;CJS属于社区标准而ESM是官方标准。 2. CJS是运行时的(Runtime)而ESM是编译时(Complier)。
推荐使用EMS模块化标准,因为CJS不便于做优化。
模块化的标准有了,那么具体谁来实现这些标准,就依赖一些前端的运行环境。也就是现有标准再有实现,主要有以下模块化的实现:
所谓包(package)就是一系列模块的集合。把各个模块聚合起来就构成了包。
那么框架和包又有什么区别呢?框架/库能倾向于功能层面,而包仅仅是结构层面。框架和包看问题的角度不同。 那么框架和库又有什么区别呢?通常我们会认为框架有一个共同特点就是约束代码结构。而库不会约束代码结构。比如:vue就是一个框架,单页面组件,每个组件包含template,scripte,style三部分。而像react,jquery,lodash就是库。
包管理的核心问题有哪些?主要包含以下问题: - 从哪里下载 - 如何升级 - 如何卸载 - 如何发布 - 如何控制版本
目前包管理用的最多的工具就是npm。而nmp核心功能包含:属性,registry,cli(command-line interface)。 当然npm也不是很完美,于是出现了以下其它的包管理工具,目的就是为了弥补npm的一些不足。
目前用的比较多的是yarn和pnpm。
其实学好前端拿高薪是一件非常简单的事情,因为前端要学的内容比较单一,核心就是围绕浏览器展开。前端要学习的核心内容无外乎以下: