继续创造,加快成长!这是我参加「日新计划 10 月更文挑战」的第15天,点击检查活动详情。

布景

我独立开发了《联机桌游合集》,是个网页,能够很便利的跟朋友联机玩斗地主、五子棋、象棋等游戏。这些游戏是不同的前端项目,而这些项目有很多公共依靠,我是如何管理的呢?是如何做计划选型的呢?

今天,我先介绍5种前端代码同享计划,我运用的计划就是从这5种中挑选的2种。这五种包括:

  • npm包
  • git submodules
  • 脚手架模板生成
  • 仿制
  • UMD或模块联邦

npm包

被同享的代码作为npm包,由引证方经过npm install装置。

特色

  1. 由于给个姓名和版别号即可被装置,并且文档能够挂在npm网站(或公司内网镜像npm网站)上,所以合适跨团队、跨安排协作。
  2. 露出的是打包后的代码,篡改本钱较大,一般认为引证方不会修正源码
  3. 开发者主要靠文档了解API,无需重视源码。
  4. 有版别管理机制,各个引证方能够按需更新。

适用场景

  1. 跨团队、跨安排协作。
  2. 有完善的运用文档。

误区

很多人认为,自己开发都是私有库,是不是不能用npm了?你或许认为npm必须发布到公开的,才能用。

其实不是这样的,npm也能够从git库房装置依靠。你能够不发布到npm,也能够只把产品(或源码)上传git库房。

所以个人开发者也能用npm,只是我认为功率不高罢了,不如直接用 git submodules。

git submodules

我在文章《Git Submodules 介绍(通俗易懂,总结了作业完全够用的 submodule 指令)》详细介绍了 Git Submodules,强烈建议阅览。

特色

  1. 由于露出的是源代码,引证方必须有子模块的读权限,所以合适团队内、安排内协作或个人开发。
  2. 一般允许引证方开发者修正子模块代码,并提交。修正子模块代码的本钱较低。
  3. 开发者主要靠阅览源码了解API和机制。
  4. 有版别管理机制,各个引证方能够按需更新。

适用场景

  1. 团队、安排内部协作。
  2. 引证方经常需求修正同享代码。

脚手架模板生成

举个例子,create-react-appvite等都有一些初始化项目的模板。其实大多数前端项目都是以这些模板为起点,逐渐迭代。并且很多公司都有自己的项目脚手架,有自己的共同的模板。这些模板,也属于是代码同享计划。

特色

  1. 露出的是源代码,开发者需求阅览源代码。
  2. 脚手架或许会预先装置一些依靠,这些依靠是npm包,开发者需求阅览脚手架文档来了解。
  3. 代码生成后,代码全放在引证方的库房里,开发者或许随时修正文件。因而,脚手架模板更新时,项目更新难度相对较高。由于原始模板文件或许现已被改的面目全非了。

留意,运用脚手架模板需求谨慎。你每发布的一个版别必须是长时刻可用的、或者更新本钱极低的。这并不简略,我之后会发文章详细聊聊,如何做好「脚手架模板生成」。

适用场景

  1. 框架脚手架(能够确保所有版别的模板都长时刻可用)。
  2. 有一些由模板方保护的文件不允许引证方修正(确保更新本钱低,能够经过自动化方法更新模板)。

仿制

就是把你需求的函数仿制到本库房来。有点类似于「脚手架模板生成」,但又不太相同。

特色

  1. 露出的是源代码,开发者需求阅览源代码。
  2. 一般仿制的代码不会太长,只是一些简略的函数。
  3. 没有版别管理机制,当仿制的源头更新后,你或许感知不到源头的更新,也或许你对源码做了修正,因而一直处于旧的版别。

适用场景

  1. 某个npm包没有做按需加载,但你只需求引证一小部分功用。
  2. 引证的代码,现已十分稳定,不必更新,或者没有跟源头保持同步的诉求。

UMD或模块联邦

例如经过script脚本引入,或者经过Webpack5的模块联邦引入。(我把他们放一同,是由于他们思想上是一致的,只是完成方法不同)

特色

  1. 露出的是打包产品,所以开发者需求阅览文档了解API。
  2. 开发者篡改本钱较高,一般认为不会去修正它。
  3. 有版别管理机制,能够经过url指定详细版别号,做到按需更新。也能够运用某个latest的URL,一直确保获取到最新的版别。
  4. 根据浏览器缓存机制,能够降低公共资源的重复加载。

适用场景

  1. 需求自动保持最新版别,且100%相信保护团队。能够运用latest url。(这样每次更新时无需主动发布)
  2. 削减公共资源的重复加载,进步用户体验。

我的挑选

  1. 我是个人开发者,所以我抛弃了npm包,选用了git submodule。
  2. 我确实有一些不同的项目,需求统一的初始化模板,所以选用了脚手架模板生成。并且我有清晰的迭代更新脚手架模板的计划。
  3. 我不需求仿制。
  4. 虽然我有一些公共依靠,可是用户加载时刻现已很短了,我的资源体积并不大,加载时刻不是我的痛点,所以我没有选用UMD、模块联邦。

写在最终

我是HullQin,大众号线下集会游戏的作者(欢迎重视大众号,联系我,交个朋友),转发本文前需取得作者HullQin授权。我独立开发了《联机桌游合集》,是个网页,能够很便利的跟朋友联机玩斗地主、五子棋、象棋等游戏,不收费无广告。还独立开发了《组成大西瓜重制版》。还开发了《Dice Crush》参加Game Jam 2022。喜欢能够重视我噢~我有空了会分享做游戏的相关技能,会在这2个专栏里分享:《教你做小游戏》、《极致用户体验》。