为什么写这个前端框架
这个是个基于nodejs的web前端框架,其实也不是我前端多么的擅长,我只是个搞后端java的,因为在上一家公司里和web打交道比较多,js用的比较多,而且恰好又有知道一点nodejs,所以就有了一点个人条件去写这样一个前后端分离的框架。当然如果真的要说什么要写这个前后端分离的框架,总结起来其实和我并没有多大关系,我是在换了第二家公司上班的前两个星期写出来的。这一家公司是搞人工智能的,现在主要是人脸识别算法,这个据我所知是公司核心的核心,公司创业也是因为这个,才能活着吧。而公司确实是个小公司,以前写的web是普通的JavaWeb吧,而之前主要负责的人换公司了。后面又有很多人和业务进来,最后这个web很难维护,不单纯是这个web项目其他的web项目也是如此。现在负责人基本上也是被经常一个静态的文件就要重新发布(springboot的,所以用jar吧直接把整个web打进来,虽然Linux支持把jar内部进行改动,但总的来说几乎不可能,太难了如果稍微多一点点改动的话),重新发布也不算什么,主要是有java的代码可能也提交了,可能就会有bug,不能因为一个静态文件就全部测试一次吧,不测又不放心。恰好负责人想更的在公司立足,他也算是新人吧,我也恰好可以写,刚刚来也没有什么好的安排。于是乎就让我写这个了,新来的总不能说不行吧,于是乎就硬着头皮写了,写啊写,写啊写就出来了这个前端框架。哎呀,啰嗦了这么久。
image.png
(ps:这个控制台输出可以参考
http://patorjk.com/software/taag
http://www.network-science.de/ascii/
http://www.degraeve.com/img2txt.php)
为什么叫ARK(方舟)
其实叫什么都无所谓的,但是现在回过头来看的话还是觉得名字其实听重要的。关于方舟这个名字其实最初只是作为第一个使用这个前后端分离框架的项目的名字,起名方舟就是想着这个项目能像圣经里的诺亚方舟一样,作为拯救世界的东西。说是拯救世界其实一点也不为过,因为只有后端的人才知道原来的代码在多次改在之下已经面目全非了,而且存在太多bug,改bug的人可能也没有什么技术已经耐心,结果只是改了一个小bug又埋下了几个大bug。我和我的方舟虽然没有受到公司足够的重视,但假设一下,公司现在不用现在的框架,可能会面临一场灾难,对于公司而言是圣经里的灾难相同的吧。而有了方舟就拯救了这一块,这使我感到宽慰。而后来我写的这个前后端分离的框架一直很惨,具体的就不吐槽了,不是有句话说的啥,友谊的小船说翻就翻,起名方舟也很适合他所经历的,没有诺言方舟那么庞大,但也有相同的质疑。甚至在启航的时候,连部署的服务器都没有,整天到处乱放,要用就部署,别人要用就删掉,让别人用。真可谓是风雨动荡,漂泊不定,想想他的身世和自己的过往,莫名就能理解他。于是乎,我就想把这个技术留下来,毕竟还是体系化的东西,可以复用的。更主要的是,让我记住他和他的故事,让他承载我……
用到了哪些技术
其实主要说来就是nodejs,有了基于谷歌V8的解释器,脚本也能脱离浏览器更加独立的做点什么了。下面的是目前用到的依赖:
"array-has": "^1.0.0",
"body-parser": "^1.18.2",
"captchapng2": "^1.0.3",
"cookie-parser": "^1.4.3",
"debug": "^2.6.9",
"ejs": "^2.5.7",
"express": "^4.16.2",
"express-status-monitor": "^1.0.1",
"got": "^8.0.3",
"log4js": "^2.5.2",
"md5": "^2.2.1",
"morgan": "^1.9.0",
"pm2": "^2.9.3",
"promise": "^8.0.1",
"redis": "^2.8.0",
"request": "^2.83.0",
"rotating-file-stream": "^1.3.4",
"serve-favicon": "^2.4.5",
"typescript": "^2.7.1"
除了这些其实还有很多其他的比如loadbalancer(多实例负载均衡的东西)等没有在项目里体现的东西。也有很多很适合用,但是由于时间问题没有加进来的东西如mongodb等
下面是pm2启动配置
var sidecarIP = '192.168.1.111';
var ip = 'st.ark.uniubi.com';
var environment = "st";
var net = "inner";
module.exports = {
apps: [
{
name: 'ark-runner',
script: './www',
watch: true,
env: {
IP:ip,
PORT: 3008,
SIDECAR_PORT:9008,
SIDECAR_IP:sidecarIP,
ENVIRONMENT:environment,
NET:net
}
},
{
name: 'ark-runner',
script: './www',
watch: true,
env: {
IP:ip,
PORT: 3009,
SIDECAR_PORT:9009,
SIDECAR_IP:sidecarIP,
ENVIRONMENT:environment,
NET:net
}
},
{//这个sidecar始终是启动的
name: 'ark-sidecar',
script: './sidecar.sh',
watch: false,
env: {
applicationName: 'uniubi-sidecar-node-web',
sidecarDelegateIp: sidecarIP,
sidecarPort: 9008,
sidecarDelegatePort: 3008
}
},
{
name: 'ark-sidecar',
script: './sidecar.sh',
watch: false,
env: {
applicationName: 'uniubi-sidecar-node-web',
sidecarDelegateIp: sidecarIP,
sidecarPort: 9009,
sidecarDelegatePort: 3009
}
}
]
};
其中sidecar是eureka注册中心帮我注册的一个jar
#!/usr/bin/env bash
java -jar uniubi-sidecar.jar
关于分享这个框架
其实我想放到github上,然后给大家直接用的。但是目前还有些不那么完善的地方,我后续完善之后会拿出来分享。也不知道是不是已经有这样的nodejs比较体系的web框架了,如果没有是不是我是重要的贡献者呢?其实写代码最主要的就是创造价值,以及在创造价值之后的开心了。留一下我qq吧(真的是土,1716330643),如果有特别需要的,等不及我完善的或者想和我一起完善的小伙伴大家可以一起来。拖延症,这个东西其实不好说,毕竟现实在这里,很多时候做不到义无反顾不顾一切的做些什么。
网友评论