award?基于react的服務(wù)端渲染框架
Award ?
-
場景: 基于react框架,支撐大型內(nèi)容網(wǎng)站的服務(wù)端渲染或單頁應(yīng)用
-
開箱即用: 開發(fā)者只需要關(guān)注組件(react)和中間件(koa)的開發(fā)即可,其他就交給award處理吧
-
插件: 提供了豐富且強大的插件系統(tǒng),讓開發(fā)者可以自由的操作award執(zhí)行的生命周期(服務(wù)端、客戶端、編譯等所有場景)
feature
-
無需任何配置,支持根據(jù)路由按需加載js和css資源
-
無需任何配置,支持CSS Modules,代碼如下示例,了解更多
import "./test.scss" // 直接如下所示寫組件即可,不需要做任何處理,award自會幫你實現(xiàn)CSS Modules <h1 className="name">hello world</h1>
-
路由底層基于react-router v5,那么就可以根據(jù)其規(guī)則配置復(fù)雜的路由規(guī)則了,了解更多
-
提供了路由切換的生命周期,了解更多
-
服務(wù)端基于koa2運行,你可以自由的編寫中間件,且支持中間件的熱更新,無需重啟或刷新服務(wù),了解更多
-
支持使用TypeScript進(jìn)行開發(fā),了解更多
-
最佳實踐,喜馬拉雅PC主站
Quick experience
# "example" is target dir
$ npm init award example
Example
Installation
$ yarn add award react react-dom
$ yarn add award-scripts -D
Create index.js
// 根目錄創(chuàng)建index.js
import { start } from 'award';
function app() {
return <div>Hello Award</div>;
}
function error({ status }){
return <div>StatusCode {status}</div>;
}
start(app, error);
執(zhí)行yarn award dev命令啟動上面這個示例,服務(wù)端將返回<div>Hello Award</div>的文檔內(nèi)容
如果上述示例在執(zhí)行時出現(xiàn)了錯誤,那么將渲染error組件
FAQ
目前有哪些項目在使用award呢,我可以放心使用么?
?? 喜馬拉雅內(nèi)部的服務(wù)端渲染項目都是使用award進(jìn)行構(gòu)建的,所以你不必?fù)?dān)心框架的維護(hù)問題
award和next.js的區(qū)別是什么?
award和next.js都是一個基于react的服務(wù)端渲染框架,假設(shè)你已經(jīng)了解next.js框架了,接下來我們來說明award和next.js的區(qū)別
-
基于react-router實現(xiàn)了
award-router,其提供了更精細(xì)化的路由控制-
比如你可以定義
path="/:id(\\d+)"來匹配全是數(shù)字的路由,對于強SEO需求的項目很有用處。請查看react-router來了解path定義的規(guī)則 -
你可以使用
award-router提供的路由生命周期來精細(xì)化控制前端的每次路由切換。比如用戶離開當(dāng)前路由時,可以使用自定義彈窗組件來確認(rèn)是否離開 -
支持自定義的嵌套路由,定義規(guī)則和
react-router一致,使用上稍有差異,點擊查看 -
?? 當(dāng)然next.js關(guān)于路由的所有功能,我們也都是支持的
-
-
關(guān)于 CSS-in-JS ,可以點擊了解更多
-
開發(fā)者只需要通過
import './style.scss'的形式引用,即可實現(xiàn) CSS-in-JS,且自動實現(xiàn)了樣式scope和開發(fā)階段的樣式緩存 -
無需任何配置,編譯后即可將樣式提取到css文件,且在生產(chǎn)環(huán)境運行時可以根據(jù)路由按需加載,包括服務(wù)端渲染直出時
-
?? next.js目前還需要一些配置來實現(xiàn),要實現(xiàn)CSS Modules還需要手動處理,而award只需import導(dǎo)入樣式即可
-
-
award提供了豐富且強大的插件系統(tǒng),可以不斷的給Award注入活力。
next.js暫未表態(tài)其插件市場 -
提出了運行包和工具包的思想,極大的減少了,在node環(huán)境運行時,所需安裝依賴的體積。
next.js不支持 -
award基于koa,開發(fā)者可以通過寫中間件自由擴(kuò)展服務(wù)端能力
-
開發(fā)階段,我們支持中間件的熱更新功能
-
?? next.js需要自行通過koa或者express再次封裝一下,才能方便的使用中間件
-
當(dāng)開發(fā)服務(wù)端渲染項目時,針對award和next.js,我該如何選擇呢?
-
如果你的項目對SEO要求比較高,且是大型的服務(wù)端渲染項目,推薦使用
award。其可以更好的幫你管理路由,管理中間件,管理樣式的開發(fā)等 -
如果項目不是那么大,對SEO的要求不是很苛刻,那還是推薦使用
next.js吧 -
兩者各有優(yōu)缺點,建議都使用下對比看看。整體的上手和學(xué)習(xí)成本,兩者都差不多
Contributing
我們的目的是繼續(xù)增強和優(yōu)化Award功能,為web應(yīng)用開發(fā)提供更便捷的輔助手段。閱讀以下內(nèi)容來了解如何參與改進(jìn)Award
Contributing Guide
閱讀我們提供的貢獻(xiàn)指南來了解award的開發(fā)和發(fā)布流程
Testing
你也可以通過運行測試腳本yarn test:client參與到award的開發(fā)中來
License
Award is MIT licensed.
