你的第一个 Nodejs 模块编译器 - (1)

What 模块?

在编程世界中,会经常听到 “模块”,那么什么是“模块”?

通俗来讲:

模块就像是一块一块的积木,你的程序大厦就是由这样一块一块的积木组成的。

专业来讲:

模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。[1]

“模块”对大家而言都不陌生,每当我们在程序里使用一个第三方库的时候,都会在代码中引入这个第三方库,每个第三方库都可以叫做“模块”。那么我们引入这个第三方库一定是为了使用它的功能,可以是一个机器学习的算法,可以是一个缓存,最终而言我们使用的会是这个第三方库提供的对象方法

简单来讲:

模块是由对象方法经过封装之后的一个整体。

再具体来分析一下,我们在现在写程序时,都是会创建许多文件,为了获取另一个文件所提供的方法我们会引用那个文件。

每个可以运行的程序都有会有一个入口文件,那么从这个入口文件出发,入口文件会依赖其他文件,其他文件又会依赖其他文件,层层深入。这就是依赖关系,那么这个依赖关系就会像一颗树一样形成依赖树,树上的每个节点就是一个文件。

在依赖树上,没有一个节点是无辜的,都会是其他节点(文件)的依赖,如果把依赖比作模块的话:

扫描二维码关注公众号,回复: 7052462 查看本文章

一个个模块的本质就是一个个的文件

Why 模块?

回到最初最重要的问题上来,“模块”已成为人们心中默认已知的概念了。那么最重要的问题不是“模块”是什么,而是为什么要有“模块”?

从另一个角度来讲,如果没有模块,程序会是什么样子的?如果这里的“模块”指的是“文件”的话,那么没有模块就等同于只有一个“入口文件”。

所有程序逻辑都保存在一个文件里,那么变量和函数之间都可以随意访问,再也不需要管理没有那么多的依赖关系了,人人都在一个世界里,程序的效率也是很高的。这在小型程序里是很有效的。

当程序规模逐渐增大之后,开发人员也会变多,那么往往会面临很多问题:

  • 不同的开发人员同时修改同一个文件,会有大量的冲突
  • 考虑程序安全层面来讲,某些函数或者变量不想暴露给其他程序
  • 程序阅读起来会非常混乱
  • 调试程序会变得很难

那么就是因为有了这些问题,才自然而然的有了“模块”这种解决方案,当我们把程序抽象成模块之后分散在不同的文件中:

  • 负责一个功能模块的开发人员大多数情况下只维护自己的文件,不会与其他模块文件冲突
  • 模块内部的方法和变量默认只在模块内提供访问,不会默认暴露出去
  • 当程序按照模块功能组织文件结构之后,阅读起来会容易很多。
  • 调试程序依然会很难,但是由于拆分了不同层级的模块,可以利用排除法减轻一定的调试负担。

引用

猜你喜欢

转载自juejin.im/post/5d581bb05188255f7c1c51ad
今日推荐