前言老项目,React+PHP+nginx项目情况PHP端配置PHP运行环境:有的人开发环境是wamp(apache+PHP),有的人是np(Nginx+PHP)。操作系统方面:大部分是win环境,少数是macOS系统,服务器是centOS系统。目录结构的前端代码和PHP代码放在一起。现在是什么状况?有时候PHP开发用redis做缓存,我提交代码。我拉下来之后,发现界面报错。原来我的PHP没有redis。版本不匹配严重影响开发效率。服务器上的nginx为了配合运营推广,把上线链接改写了,比如:/item_info?id=xxx变成/item-info-id-xxx.html,我们前端必须配置自己的nginx修改一下再次,我们用apache的同学还得请教运维同学。启动np的脚本不是很稳定。有时它自己静静地关闭。当你看到一个接口错误时,你会责怪你的PHP同学。其实是你自己的PHP进程崩溃了。另一种情况是,假设你周末在家,急需修改线上代码。修改jsx文件后,发现没有安装PHP环境!卧槽??网上的nginx配置不能完全使用。比如nginx会根据你的hostname进行处理,比如重写,但是我本地一般是127.0.0.1。虽然可以修改hosts文件,在线域名指向本机,但是改起来很麻烦。以我的开发环境为例(nginx1.11+php5.5+win10)运行一个老项目,需要执行一个cmd脚本@echooffechoStartingPHPFastCGI...cd"E:/np/php-5.5.26/"start/bphp-cgi.exe-b127.0.0.1:9000-cE:/np/php-5.5.26/php.iniecho启动nginx...cd"E:/np/nginx-1.11.1/"启动/bnginx.exe=========================================================================================================================================================================================================================================现在我处于这样一个尴尬的境地:老项目没那么重要,请来开发PHP,成本太高,而且工作量不大,不请来也没办法解决PHP端的错误。最后经过考虑,还是决定使用Nodejs来解决。使用Nodejs方案,我使用Koa框架作为服务端接口调用。由于本地np环境的折磨,我决定使用反向代理将请求转发到/api/上线,这样就可以避免在本地运行PHP了。令人担忧。//反向代理constproxy=require('koa-proxies');app.use(proxy('/api',{target:isDev?'http://test-m.xxx.com:80':'http://m.xxx.com:80',changeOrigin:true,日志:真}));这里有一个想法,其实如果当时把域名写死,也可以避免反向代理的麻烦,但是想到如果一旦发现域名被改了,可能会容易出错修改它。..rewriterewritenginx重写指令如下rewrite^/groupinfo-(.*)-(.*).html?(.*)$/groupinfo.html?$1=$2&$3last;最后重写^/selection/brand_detail-(.*)-(.*)html?(.*)$/selection/brand_detail.html?$1=$2&$3;使用koa-rewrite中间件,复制粘贴即可。constrewrite=require("koa-rewrite");app.use(rewrite(newRegExp('^/groupinfo-(.*)-(.*).html?(.*)$'),'/groupinfo.html?$1=$2&$3'));app.use(rewrite(newRegExp('^/selection/brand_detail-(.*)-(.*)html?(.*)$'),'/selection/brand_detail.html?$1=$2&$3'));这样一劳永逸,一旦修改,同时生效,再也不用去骚扰运维同学了。静态文件nginx的另一个功能是静态文件服务器,这也可以使用Koa的中间件来完成。constserv=require('koa-static-server');app.use(serv({rootDir:path.resolve(__dirname,'../../public/'),}););整个服务器端代码/***由chenchen创建于2017/2/27。*/constKoa=require("koa");letRouter=require('koa-better-router');constserv=require('koa-static-server');constproxy=require('koa-proxies');constpath=require("path");varapp=newKoa();constisDev=process.env.NODE_ENV!=='production';letrouter=Router({prefix:'/api'}).loadMethods();varbody=require('koa-better-body');constrewrite=require("koa-rewrite");//反代理app.use(proxy('/api',{target:isDev?'http://test-m.xxxx.com:80':'http://m.xxxx.com:80',changeOrigin:true,logs:true}));//rewriteapp.use(rewrite(newRegExp('^/groupinfo-(.*)-(.*).html?(.*)$'),'/groupinfo.html?$1=$2&$3'));app.use(rewrite(newRegExp('^/selection/brand_detail-(.*)-(.*)html?(.*)$'),'/selection/brand_detail.html?$1=$2&$3'));app.use(body());app.use(函数(ctx,next){console.log(ctx.path);returnnext();});app.use(serv({rootDir:path.resolve(__dirname,'../../public/'),//rootPath:'/',//log:true,//index:'noaccess.txt'//避免路由/和静态文件/index.html冲突}));app.listen(8088,_=>{console.log('appstartat8088');});在测试的最后,添加一个npmscript"start-test-server":"nodemon--harmonyserver/index",执行npmrunstart-test-servertest,就可以了!编译优化老项目使用webpack打包,现在看当时的配置文件webpack.config.js,第一反应是,谁写的?newwebpack.optimize.UglifyJsPlugin({compress:{warnings:false}})开发时如何使用这个插件?(后来想想,其实是我写的)。.webpack打包,从webpack1升级到webpack2参考迁移教程webpack编译优化。在此不再赘述。大家可以参考我写的这篇文章总结利用现有资源,使用Nodejs配合PHP,优化老项目,拓展自己解决问题的思路。我认为这是一次有趣的经历。其实老项目改造还是有很多坑的,想到再慢慢更新。
