我写了一些vue的业务代码,也就是一些在公司写的需求代码。vue项目,都是一个个.vue文件,这一个个文件都是一个个拆分了的页面视图块,我觉得组件化就是将视图拆解成一个个小视图,是以视图为划分;模块化我还没写过,但我看了红宝书的一点点介绍后,我觉得模块化是以功能为单位进行划分,比如:弹窗功能,我可以用一个函数封装一个弹窗功能。
现在出现了一个组件化和模块化交叉的问题:这个弹窗是组件化的思维还是模块化的思维?
假设我现在说他是组件化的:弹窗是页面视图的一部分,他能被抽离出来,做一个组件,确实,可以按视图的一部分划分;但是,弹窗也是一个功能吧,它用来提示用户。反过来也一样,就是组件化可以是模块化,模块化也可以是组件化。这样就不清楚了,但是我们是程序员,不要以视图来说话,我们从代码的角度去区分它们。
还是从弹窗的代码入手,我这声名一个函数,这个函数需要传三个参数,type(弹框类型,用来确定主题颜色),title(弹框的标题,程序员自己定义文本字符串),message(提示内容,还是程序员自己定义文本字符串)。函数体要做的事情就是,通过js方法,创建标签、文本、插入到文档对象模型中,这些过程其余的处理就不摊开讲。这是一个js文件,它能得到一个浏览器的弹窗,可以让弹窗在浏览器中弹出来,也就是说,我用这个函数,这个文件,这个模块,实现了一个页面中的组件或说视图的一部分。
最近我还看了一点webpack和vite的简介,webpack是纯模块化思想,从代码出发;而vite在模块化思想上,吸取了组件化思想的优点,类似于懒加载。vite的速度就比webpack更快了。但是,这只是组件化的一次小胜利,vite更符合前端的习惯:所见即所得。但是,对于js来说,想要发展壮大,还得用模块化思想,因为,浏览器不是js唯一的平台。
我也封装了一些组件,不通用,不够抽象,但我也写了我认为足够抽象的函数,比如我在gitee上写的扁平化数组变树形数组的函数:[recursion.js · 赵先勇/js_demo - 码云 - 开源中国](https://gitee.com/runningyong/js_demo/blob/master/recursion.js) 我觉得它足够解决那一类的问题,足够抽象。
最后,还是: 天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行弗乱其所为。所以动心忍性,增益其所不能。