基于npm-package的分包策略

基于npm-package的分包策略

问题描述:

课程中我们的包是这样规划的

core
    |_cli
    |_exec
utils
    |_get-npm-info
    |_format-path
    |_log
    |_util
...

在框架部分(core),这样的粒度是易于理解的。

在工具部分(utils),这样的粒度是不是太细了呢?过细的粒度会造成工程复杂度的指数级上升。

从一开始就分太细,一旦后期需要调整,那么npmjs.org面临无法删包的情况导致僵局。


我的问题:

- utils中的包,是按什么原则划分颗粒度的呢?

- 用什么指标或者原则,来衡量分包策略是否正确?

- 粒度越小,那么包和包之间共享数据的需求就会越多,还有哪些比较好的实践方式?

    我所知道的有:

    - 全局变量 process.env

    - 发布订阅者模式

    ​    ​- 事件总线

    ​    ​- 内置模块EventEmitter

- 粒度小,能带来哪些优势呢?


请不吝赐教,谢谢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
扬_灵 2021-03-04 13:11:46

同学你好,utils中的包是按照下图进行划分的,分包策略你可以参考一下vue-cli和create-react-app的分包,都是按功能进行划分的,像是对浏览器的处理、babel处理、模版这些都是建立单独的包,公共的cli-shared-utils(vue-cli)和 react-dev-utils (create-react-app)的包中封装的都是一些常用的公共方法,像是不常用的的方法会在对应的包中创建utils文件进行使用。衡量分包策略的原则并没有明确的标准。包和包之间共享数据的实践方式,我常用的就是全局变量和属性传递这些。粒度小就是为了方便维护和复用,比如针对某一功能进行升级和优化的时候粒度小能快速找到对应代码进行修改并且不影响全局代码的运行。http://img1.sycdn.imooc.com//climg/604051490956a3a109200456.jpg

  • 提问者 renderman #1

    嗯,按照功能(如图)进行划分。谢谢回复。

    你最后一句话我不是很理解“粒度小就是为了方便维护和复用,比如针对某一功能进行升级和优化的时候粒度小能快速找到对应代码进行修改并且不影响全局代码的运行。

    粒度小会造成开发过程中定位问题的复杂性吧,假设utils只有一个包,那么我只需要按照api名称搜索即可,现在粒度那么细定位代码反而更加麻烦,不是吗?

    另外,发布到npmjs.org上的包不是说删除就能删除的,一旦涉及到包的调整,就麻烦了。


    你同意我的观点吗?


    2021-03-04 14:14:01
  • 扬_灵 回复 提问者 renderman #2

    同学你好,分包策略的划分没有准确的标准,你的观点是没问题的,划分时也要注意包的体积,项目中的按功能分包,像git操作,API请求这些功能都是些脚手架必须具备的,发布到npm上后会对包进行修改优化,这些也属于是正常迭代更新,但是整体的功能是不变的。

    2021-03-04 18:19:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师