职责拆分:gulp相关构建代码的重构方案_第1页
职责拆分:gulp相关构建代码的重构方案_第2页
职责拆分:gulp相关构建代码的重构方案_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

职责拆分:gulp相关构建代码的重构⽅案今天在读微信⼩程序项⽬的代码,主要看了构建的部分,在读这部分代码和画架构图的过程中,发现了⼀些不是很合理的地⽅。我们的⼩程序构建⽅案scss来做css样式的管理,使⽤babel解析js的es6、7和flow语法,使⽤单⽂件组件(sfc)的形式整合wxml、wxss、js等。构建的最终产物是⼩程序的原⽣代码,然后经由⼩程序开发者⼯具再次打包和构建。我们构建使⽤的是gulp。因为只是⼏种资源的处理,不涉及到模块解析,所以gulp⽐webpack更合适。构建相关代码的结构插件、配置和⼯具等通⽤代码这3部分。项⽬中对应的⽂件有5个,根⽬录下的gulpfile.js和build⽬录下的compile、util、config等⽂件。他们之间的关系如下图:命令⾏使⽤build、dev、qa、sgb等npmscripts会对应的执⾏build、default的task,两者各⾃有⾃⼰的处理流程。处理过程中会⽤到我们扩展的解析单⽂件组件的gulp插件。图中绿⾊部分是可复⽤的utils、config代码,红⾊部分是task相关的代码,⽽橙⾊部分是我们所扩展的gulp插件。他们之间的关系如图所⽰,但从代码的⽬录结构中并不能清楚地看出这种关系,需要具体去看代码才能逐步理清。构建代码重构的想法现在的⽬录结构没有清晰反映出task、plugin等的关系,⽽且命名也达不到见名知意的要求,于是我有了重构的想法。我按照之前分析出的代码职责调整了⼀下⽬录结构:tasksflowcompile-sfc.jsclean-distDir.jscompile-sass.jscompile-js.jshandle-config.jscopy-otherFiles.jsproduction-task.jsdev-task.jspluginssfcindex.jsmy-script-compiler.jsconfigindex.jsutilsindex.jsindex.js⾸先拆分出了tasks、plugins这两个⽬录,config、utils考虑到后来的扩展也改成⽬录的形式了。tasks下⾯是production、dev两种环境下的任务,他们的实现流程需要组合flow下的细⼩步骤实现。plugins下明确封装了解析sfc的gulp插件,包括解析sfc中js代码的部分。除这些以外,还应该把gulpfile移到build⽬录下,因为gulpfile也是build的⼀部分,放到build下更合理,就像vuecli脚⼿架⽣成的代码把webpack.config.js放到build下⼀样。src下的代码也不应该引⽤build的代码,应该通过环境变量、全局变量等⽅式。这样的重构只是静态代码结构的变更,对代码的运⾏并没有啥影响,但代码的易理解和易维护性会增强⼀些。总结总结为了更便捷的开发、更好地代码可维护性,我们使⽤了scss、babel等预处理⼯具,使⽤单⽂件组件(sfc)的⽅式整合页⾯相关的wxml、wxss、js代码,相应的也就需要把这些资源的处理增加到构建流程中。经分析,使⽤gulp是⽐较合适的。读代码结合画代码结构图理清了代码从逻辑上的职责划分,也发现了⼀些命名⽅⾯不太合理的地⽅,于是也就有了重构的想法。主要⽅向是把不同的职责的代码(⽐如task、flow、plugin)放到不同的⽂件和⽬录中去,⽽不要都堆到⼀起。于是,按照代码的不同职责分出plugins、tasks和utils、config⽬录,把gulpfile也放⼊build⽬录下,把task的执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论