← 返回文章列表

oa-codeblock项目架构设计 - JS文件包含

分类:计算机/架构/oa-codeblock项目架构设计

最近在开发一个非常复杂的需求,代码量巨大,为了清晰起见,必须拆分成多个JS文件,然后有序地组合起来。开发框架目前只支持将代码写在单个JS文件script.js中,因此需要修改。

考虑历史代码兼容性和开发周期,我决定采用一种简单的实现方案:文件包含。类似于C语言中的#include,我们在JS文件中做特殊标记,表明要将另一个JS文件的内容包含进来,然后在构建时用指定JS文件的内容替换这个特殊标记,这样就实现了分开编写、组合运行。

文件包含标记:在JS文件中用如下标记表明要包含哪个JS文件:

//#include: A/B/C/xxx.js

解析文件包含

有了文件包含机制,我们就可以获得以下好处:

  1. 将单个复杂的任务分解为多个简单的任务,提高了清晰度、可维护性。
  2. 可以实现公共代码,免于复制粘贴,提高了代码复用度。
  3. 在OA系统的代码块机制中,多个<script src="...">之间的执行顺序是随机的,通过在同一个文件中控制文件包含的顺序,我们就可以严格控制多个脚本间的执行顺序。

文件包含机制也有其缺点:

  1. IDE不识别:标记是我们自己定的,IDE并不知道要包含哪个文件、文件间的顺序等信息,也就无法提供文件跳转、准确的代码提示等功能。
  2. 作用域不隔离:文件包含本质上是将代码拼在一起,是同一个作用域,并没有实现真正的JS模块化。编写代码时需要对这一点有清晰的认识,如果需要模块化,则必须自己用IIFE等手段实现。
  3. 不太容易理解:我开发的这个非常复杂的需求,其他同事在阅读代码时,不太容易跟踪和理解同一作用域、多层包含下的执行过程。

这些缺点,未来可以通过用Webpack实现真正的JS模块化来解决。