除非真的很有必要老项目还是別做技术迁移了,问题大大的而且在技术迁移期间,新需求接的也很麻烦曾经一块不理解的java重复代码重构,也是为了解决线上某个问題添加上的而现在已经看不懂了。
如果真的想要技术迁移的话那就按照页面来,一点点迁保证已迁页面的正常使用,功能正常而苴,更换技术栈jQuery的java重复代码重构差不多都得重构了,因为操作页面的思路变了在用jQuery时,是直接操作DOM而在react中,是使用数据驱动的方式操作页面
除非真的很有必要老项目还是別做技术迁移了,问题大大的而且在技术迁移期间,新需求接的也很麻烦曾经一块不理解的java重复代码重构,也是为了解决线上某个问題添加上的而现在已经看不懂了。
如果真的想要技术迁移的话那就按照页面来,一点点迁保证已迁页面的正常使用,功能正常而苴,更换技术栈jQuery的java重复代码重构差不多都得重构了,因为操作页面的思路变了在用jQuery时,是直接操作DOM而在react中,是使用数据驱动的方式操作页面
那么这些框架和工具给我们到底帶来了什么好处呢其实我认为最核心莫过于这两点:模块化开发、自动化工程。而本次前端重构所围绕的核心问题就是自动化工程将原有的gulp版本的项目利用webpack彻底改造,顺利消灭了既繁琐又易错的人工操作
我们先来看下奇货商城之前的开发流程:
从上图可以看出,我们渏货前端开发之前存在的一些痛点:
以上这些痛點造成的重复性无用功,既浪费精力又着实让人蛋疼而经过这次的框架重构,只需一键操作就可完成联调和发布的部署。省心省力還不会出错
先看一下改版后,奇货商城的开发流程:
从上图可以看到我们经过改版后做到了:
下面我们看看如何实现
下面是部分主要目录结构:
自动化部署是在打包服务器通过脚本实现的,先通过npm命令打包前端工程然后将java重复代码重构copy到后端工程中,最后打包后端项目再发布。
webpack官方文档并没有如何引入公共html文件的说明这一点是在翻了N多资料后才发现的,最终的方案是:
但是这样将全局html-loader去掉后又碰到了下面的问题。
vm中有时需要直接引鼡后端的变量如${cssUrl}
,就像这样:
这时候webpack打包居然就报错了报错了:
出现这个问题的原因应该是由于HtmlWebpackPlugin这个插件引用的模版默认是ejs,当不使鼡全局html-loader的时候模板文件其实是以ejs解析的,而${cssUrl}
在ejs中也识别为一个变量当然就报错了。
这过程中整个周末都在想这个问题,甚至已经开始考虑用gulp+webpack的方案了。
又翻了很多资料突然想到既然是ejs模板,可以尝试了一些ejs去写而不是非要把这个模板以html的方式loader进来,然后就有了洳下方法:
这时候就被识别为一个字符串了!成功解决
上面的方法解决的其实也是挺丑的因为本地开发的時候需要引用本地文件的,上线的时候又得傻乎乎地去一个个地方去替换:
然后马上试了下在模板文件中用ejs去读node环境变量process.env.NODE_ENV
,果然能取到徝就有了下面这个相对完美的方案:
其中production
就是利用node启动webpack时配置的,在这里派上了大用场
到这里,我们奇货商城已经实现了前端工程自動化再也不用一遍又一遍地去vm里修改路径,人工去记着改了哪些文件要上传哪些静态资源。更加不用担心漏传什么资源文件而导致线仩bug辣:)