内容简介:lin-cms是我们林间有风团队开源的一款CMS,它采用目前主流的前后端分离的架构,lin-cms剪彩你也可以直接查看线上的demo。
lin-cms是我们林间有风团队开源的一款CMS,它采用目前主流的前后端分离的架构, 前端 使用vue作为基础框架, 后端 选择了我们团队大量实践使用的flask作为基础框架。
lin-cms剪彩
你也可以直接查看线上的demo。
得益于前后端分离分离的架构,这套CMS十分灵活,市场上的CMS多是选择服务端渲染的方式,lin-cms由于是前后端分离的方式,因此你可以选择多语言的后端,和多框架的前端。
团队在开源的之初,便已推出了vue的前端版本和flask的后端版本,vue在国内可以说的上是如日中天,受众面极广。而flask在国内确实用的人太少,国内的主流服务端语言都被 java 、 php 、node.js、 go 霸占。因此,在进行调研和诸多权衡后,团队选择了node.js作为第二支持语言。
选型和架构
node.js近几年发展极快,尤其是在工程化的前端,几乎已成标配。在后端方面koa与express双雄争霸,express起步早,发展成熟,生态稳定;而koa更小更轻更易学习,国内已有 egg.js
和 think.js
基于koa的二次框架,显然koa更加具有吸引力。
谈到这里,有一个已经呼之欲出的问题,既然已经有egg.js这样的好框架,为什么不直接选择它了?
之所以不选择egg.js,而是直接用koa,有几个很重要的原因:
- koa更小更轻更易学习,而我们如果选择了egg.js岂不是直接失去了这个巨大的优点。
- egg.js已经整合了诸多生态,这些生态并不一定适合我们,或者说我们可以有更好的选择。
- egg.js已经有插件,扩展等诸多概念,尤其是egg的插件与lin-cms中的插件大相径庭,十分不适合我们再做改变。
lin-cms-koa的整体架构如下:
或者说lin-cms的后端的架构都如上图所示,接下来我们来详细阐述一下lin-cms-koa的整合之路:
typeorm class-validator koa-router
简单使用
lin-cms开源已有一段时间了,文档均已十分完善了,目前已有一些项目正在使用它进行开发。当然后端还是选择的flask版本,接下来我们使用lin-cms-koa来简单的使用一下lin-cms。
lin-cms前端部分使用起来非常简单,你只需要一点git基础就可以使用了,在lin-cms-vue的官方仓库中的README可以找到如下一段:
# clone the project git clone https://github.com/TaleLin/lin-cms-vue.git && cd lin-cms-vue # install dependency npm install # develop npm run serve 复制代码
如果你通过终端成功的运行了这些命令之后,在浏览器中打开 http://localhost:8080/#/login
,你会打开前端的登陆界面。
不过这还不够,我们还需要后端部分。在浏览器中先打开 https://github.com/PedroGao/lin-cms-koa
,查看lin-cms-koa的相关信息。
当然你也可以跳过查看,直接在终端中运行如下命令:
git clone https://github.com/PedroGao/lin-cms-koa && cd lin-cms-koa 复制代码
npm install 复制代码
接下来:
请确保你拥有 mysql 数据库和 node.js 的运行环境,并创建名为 lin-cms2
的数据库。
如果你使用 typescript 运行,那么请在 ts/app/config/secure.ts
中修改你自己的 mysql 配置。
如果你使用 javascript 运行,那么请在 js/app/config/secure.js
中修改你自己的 mysql 配置。
修改好后,请运行下面的命令,它会在数据库中添加一个超级管理员。
npx jest tests/app/dao/addSuper.test.ts 复制代码
接下来,请选择一个方式运行你的程序。
以 typescript 的方式运行
npm run start:dev 复制代码
将 typescript 编译成 javascript 的方式运行
npm run tsc:prod && npm run start:prod 复制代码
通过 javascript 的方式直接运行
node js/app/starter.js 复制代码
如果一些顺利,后端会监听本地的3000端口,然后我们再次来到lin-cms-vue的前端的文件夹下,打开 src/config/index.js
文件,修改里面的 baseUrl
为 http://localhost:3000/
,此时webpack会reload你的前端程序,如果它没有,请你再次通过
npm run serve 复制代码
来运行lin-cms-vue这个项目。浏览器再次打开 http://localhost:8080/#/login
,点击上面的登陆按钮,如果顺利,你会登陆成功进入林间有风页面。
特点
lin-cms-koa是团队在lin-cms上的又一次实现,得益于lin-cms-flask的实现,lin-cms-koa变得更加精炼和易用。lin-cms-koa目前还未进入团队的仓库进行维护,目前只放在了我个人的仓库上,待稳定后便会进入到团队仓库进行维护和发布。
lin-cms-koa分为核心库和实例工程两大部分,核心库——lin-cms-test发布在了npm上,目前还处于测试状态下,以后正式发布会改名。实例工程就是上述的项目了。
lin-cms-koa整体上使用typescript开发,也用了一些ts的特性,之所以用ts,是因为ts对于项目的开发和维护有极大的益处。不过我们也提供了js的版本,即 lin-cms-koa/js
目录,而目录 lin-cms-koa/ts
是我们的ts版本,你可以任意选择一个版本进行开发,当然目前不建议直接使用在生产环境中。
js版本的大部分代码是由ts版本编译而来的,但是考虑到二者的差异性,我们做了很多的补丁,主要是js目前不支持装饰器,而我们的参数校验使用到了装饰器,所以我们在js/app/libs/util.js中提供了 decorateProp 和 decorateEntify 这两个方法。
在ts中,一个简单的校验类可以这样创建:
export class BookSearchForm extends Form { @IsNotEmpty({ message: "必须传入搜索关键字" }) q!: string; } 复制代码
通过上述的两个函数做补丁,在js中它是这样的:
class BookSearchForm extends Form {} decorateProp([ IsNotEmpty({ message: "必须传入搜索关键字" }) ], String, BookSearchForm.prototype, "q"); exports.BookSearchForm = BookSearchForm; 复制代码
当然,这样的补丁也被应用在了model类上,你可以查看相关的代码。
总结
lin-cms-koa从一穷二白到今天支持双语言,也只有20天左右的时间,这20天里,它确实花去了我很多的时间。当然,它还不成熟,只能作为我的个人项目进行展示,我们团队会在后续进行诸多测试和改善,它会在不久后正式进入我们的团队仓库,并提供完善的文档。
lin-cms开源不久,我们团队一直在致力于它的发展和完善,如果你感兴趣可以查看官网进行尝试。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- public 和私有类字段[双语]
- React 16.x 蓝图[双语版]
- 重磅 | CS 294 2018 今日开课!双语字幕独家上线!
- 详细的双语言(Java与Kotlin)5种单例模式
- 谷歌双语助理来了!中英夹杂也不怕,递归神经网络和随机森林显神威
- 代码也能预训练,微软&哈工大最新提出 CodeBERT 模型,支持自然-编程双语处理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++设计新思维
(美)Andrei Alexandrescu / 侯捷、於春景 / 华中科技大学出版社 / 2003-03 / 59.8
本书从根本上展示了generic patterns(泛型模式)或pattern templates(模式模板),并将它们视之为“在C++中创造可扩充设计”的一种功能强大的新方法。这种方法结合了template和patterns,你可能未曾想过,但的确存在。为C++打开了全新视野,而且不仅仅在编程方面,还在于软件设计本身;对软件分析和软件体系结构来说,它也具有丰富的内涵。一起来看看 《C++设计新思维》 这本书的介绍吧!