基础-模块化与包管理器

50 阅读2分钟

在传统的开发里,都会遇到这样一个问题。

项目到达一定程度后 --> 代码量增加 --> 需要很多个文件 -->全局污染问题。

这么多文件,这么多函数,这么多变量,怎么能保证这些变量命和函数名没有冲突呢?所以说,在这种情况下,全局污染是避免不了的问题。另外,随着文件的数量增多,不可避免地带来了依赖混乱的问题,比如a.js要使用b.js里的东西,b.js又要用c.js里的东西等等,在这种复杂的依赖关系里,就有一个问题 如何规划js的引入顺序

所以,模块化就是为了解决全局污染依赖混乱这两个问题。

那模块化的标准就有两个:

image.png

解决思路就是把每个js看做是一个模块,每个模块模块可以有自己的内部实现,也可以导出某些功能给外部使用。

1. 污染全局

//main.js
function sum(a, b) {
  return a + b;
}
 <body>
    <script src="./main.js"></script>
  </body>

这种情况下,能在window对象里拿到这个sum函数,污染了全局。

2. 模块化

<script src="./main.js" type="module"></script>

这种情况就不会污染全局了,这种算是一个模块了。

1. 导出

将模块的一些内容导出,提供给外部使用。

const getSum = (a,b) => {
  return a + b;
};

export default getSum;// 默认导出
2. 导入

导入需要的模块,供本模块使用。

import getSum from "./a.js";

console.log("res", getSum(2, 5)); //7

这样,只需要定义一个 入口文件main.js,由入口文件去导入其他的模块,这样项目的全局污染和依赖混乱的问题就被解决了。

有了模块化之后,各种第三方库不断出现,每个第三方库解决前端的一部分问题,那随之而来的问题也出来了,如何管理这些第三方库?

这就要说到 了,什么是包?说白了就是模块的集合,每个包里包含了一个或者多个模块。

每个包可能有自己的github地址官网版本依赖

每个包之间可能互相依赖,那带来一些问题,如何快速下载一个包,如何卸载一个包,如何优雅的升级一个包,如何避免包的版本冲突?

image.png