摘要:而在國內確實用的人太少,國內的主流服務端語言都被霸占。因此,在進行調研和諸多權衡后,團隊選擇了作為第二支持語言。整體上使用開發,也用了一些的特性,之所以用,是因為對于項目的開發和維護有極大的益處。
初衷
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作為orm框架,它為lin-cms提供模型創建,數據操作等諸多功能。
數據校驗部分,我們整合了class-validator,并提供了一個基礎的Form類來方便校驗前端傳來的數據。
在控制器部分,我們整合了koa-router作為路由框架,并在其基礎上提供了Redprint類來進行路由函數的權限控制。
其它...
簡單使用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開源不久,我們團隊一直在致力于它的發展和完善,如果你感興趣可以查看官網進行嘗試。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102005.html
摘要:工具軟件欲先攻其事必先利其器,用好工具是做好開發的基礎。框架目前最流行簡單易用,越來越多人用曾經很流行,現在有點衰退狀態管理后端渲染開發工具依賴管理,應用打包,任務管理,編輯器擴展,,移動端有了前端的知識后,我們還可以開發手機。 2019年即將到來,各位同學2018年辛苦了。 不管大家2018年過的怎么樣,2019年還是要繼續加油的! 在此我整理了個人認為在2019仍是或者將成為主流的...
摘要:年,軟件開發界發生了很多變化。六數據存儲是一個關系型數據庫管理系統,由瑞典公司開發,目前屬于旗下公司。最流行的關系型數據庫管理系統,在應用方面是最好的,關系數據庫管理系統應用軟件之一。七是最新的修訂版本,年月由萬維網聯盟完成標準制定。 2015年,軟件開發界發生了很多變化。有很多流行的新語言發布了,也有很多重要的框架和工具發布了新版本。下面有一個我們覺得最重要的簡短清單,同時也有我們覺...
摘要:年,軟件開發界發生了很多變化。六數據存儲是一個關系型數據庫管理系統,由瑞典公司開發,目前屬于旗下公司。最流行的關系型數據庫管理系統,在應用方面是最好的,關系數據庫管理系統應用軟件之一。七是最新的修訂版本,年月由萬維網聯盟完成標準制定。 2015年,軟件開發界發生了很多變化。有很多流行的新語言發布了,也有很多重要的框架和工具發布了新版本。下面有一個我們覺得最重要的簡短清單,同時也有我們覺...
摘要:在年成為最大贏家,贏得了實現的風暴之戰。和他的競爭者位列第二沒有前端開發者可以忽視和它的生態系統。他的殺手級特性是探測功能,通過檢查任何用戶的功能,以直觀的方式讓開發人員檢查所有端點。 2016 JavaScript 后起之秀 本文轉載自:眾成翻譯譯者:zxhycxq鏈接:http://www.zcfy.cc/article/2410原文:https://risingstars2016...
摘要:前段時間有寫過一個在項目中的實踐。在里邊有解釋了為什么要使用,以及在中的一個項目結構是怎樣的。關于的配置文件,在本項目中存在兩份。一個需要注意的小細節因為我們的與實現版本中都用到了。 前段時間有寫過一個TypeScript在node項目中的實踐。 在里邊有解釋了為什么要使用TS,以及在Node中的一個項目結構是怎樣的。 但是那僅僅是一個純接口項目,碰巧趕上近期的另一個項目重構也由我...
閱讀 1342·2019-08-30 15:55
閱讀 1645·2019-08-26 10:21
閱讀 3438·2019-08-23 18:28
閱讀 3375·2019-08-23 15:38
閱讀 744·2019-08-23 15:24
閱讀 2135·2019-08-23 13:59
閱讀 775·2019-08-23 11:31
閱讀 2870·2019-08-23 10:53