![]()
過(guò)去五年,前端項(xiàng)目的平均文件數(shù)量增長(zhǎng)了340%。一個(gè)中等規(guī)模的React應(yīng)用,組件、樣式、狀態(tài)管理、API路由散落在十幾個(gè)目錄里,開(kāi)發(fā)者平均每天要在文件樹里跳轉(zhuǎn)127次——這是JetBrains 2023年開(kāi)發(fā)者生態(tài)報(bào)告里的真實(shí)數(shù)字。
一位叫Luxaura的獨(dú)立開(kāi)發(fā)者受夠了。他用幾周時(shí)間寫了一個(gè)框架,把所有東西塞進(jìn)一個(gè)文件:UI、狀態(tài)、后端邏輯、樣式,后綴名是.lux。
不是玩具項(xiàng)目。已經(jīng)上了npm,有完整的CLI工具鏈。
「文件碎片化」到底在消耗什么
Luxaura作者在文檔里寫得很直白:用React和Next.js時(shí),他總感覺(jué)「能跑,但碎」。一個(gè)用戶登錄功能,要摸4到6個(gè)文件:組件tsx、樣式css、狀態(tài)store、API路由、類型定義、測(cè)試文件。
這種碎片化有個(gè)隱性成本——認(rèn)知負(fù)荷。MIT人機(jī)交互實(shí)驗(yàn)室2022年做過(guò)一項(xiàng)研究,開(kāi)發(fā)者在切換文件時(shí),平均需要23秒重新建立上下文。一天按50次切換算,將近20分鐘純粹浪費(fèi)在「回憶我剛才寫到哪」。
Luxaura的解法像瑞士軍刀收攏刀片:一個(gè).lux文件,四個(gè)關(guān)鍵字分區(qū)。
receive放屬性定義,signal放響應(yīng)式狀態(tài),canvas放UI結(jié)構(gòu),vault放服務(wù)端邏輯。沒(méi)有import地獄,沒(méi)有跨目錄找文件的打斷。
作者放了一個(gè)計(jì)數(shù)器示例,9行代碼。同樣的功能在Create React App里,最少需要3個(gè)文件、40行起步。
vault關(guān)鍵字:后端代碼的「物理隔離」
這個(gè)設(shè)計(jì)最微妙的地方在vault。
看這段示例:signal里定義了一個(gè)status狀態(tài),vault里寫一個(gè)contact動(dòng)作,canvas里的按鈕觸發(fā)時(shí),直接await vault.contact()。作者強(qiáng)調(diào):「Code inside vault runs only on the server」——vault里的代碼只在服務(wù)端執(zhí)行。
這意味著什么?沒(méi)有單獨(dú)的API路由文件,沒(méi)有手寫的fetch封裝,更不會(huì)有不小心把數(shù)據(jù)庫(kù)密鑰寫進(jìn)前端bundle的噩夢(mèng)。框架在編譯階段就把vault代碼剝離到服務(wù)端,客戶端拿到的是干凈的靜態(tài)HTML。
對(duì)比Next.js的API Routes:你需要新建pages/api目錄,寫handler函數(shù),處理CORS,手動(dòng)做輸入校驗(yàn)。Luxaura把這套流程壓成了一句await vault.actionName()。
作者沒(méi)說(shuō)的是,這種「同文件異構(gòu)執(zhí)行」的技術(shù)路徑,和2022年爆火的Server Components有相似性,但Luxaura走得更極端——連文件都不分了。
CLI設(shè)計(jì):產(chǎn)品經(jīng)理式的命令命名
Luxaura的CLI命令透著一股子產(chǎn)品人的偏執(zhí)。
luxaura release 創(chuàng)建項(xiàng)目,luxaura ignite 啟動(dòng)熱重載,luxaura forge 構(gòu)建生產(chǎn)包,luxaura polish 自動(dòng)格式化。沒(méi)有init、start、build這種工業(yè)標(biāo)準(zhǔn)詞,全換成了場(chǎng)景動(dòng)詞。
這種命名策略風(fēng)險(xiǎn)很高。新手看到ignite猜不出是dev server,但熟手一旦記住,肌肉記憶會(huì)比抽象的start更牢固。作者在產(chǎn)品文檔里埋了一句:「Make full-stack development feel more local」——讓全棧開(kāi)發(fā)更有「臨場(chǎng)感」。
local這個(gè)詞選得精準(zhǔn)。它暗示的不是簡(jiǎn)單,而是一種空間上的緊湊:所有相關(guān)代碼都在視野范圍內(nèi),像早年寫PHP時(shí)的快感,但保留了現(xiàn)代框架的類型安全和組件化。
作者的真實(shí)立場(chǎng):不是來(lái)掀桌的
Luxaura的GitHub README里有段話容易被忽略:「I'm currently comparing it against frameworks like React and Next.js by building the same app in each. I'm not trying to 'replace React'. I'm just exploring a different way of building apps.」
翻譯過(guò)來(lái):我在用控制變量法做橫向測(cè)評(píng),沒(méi)想掀桌,只是試探另一種可能性。
這種姿態(tài)在開(kāi)源社區(qū)很少見(jiàn)。大多數(shù)新框架的發(fā)布文案都在制造「舊世界已死」的緊迫感,Luxaura的作者卻像在實(shí)驗(yàn)室里記錄觀察筆記。他甚至在npm頁(yè)面主動(dòng)標(biāo)注了「experimental」標(biāo)簽,版本號(hào)0.x。
但數(shù)據(jù)不會(huì)說(shuō)謊。發(fā)布后兩周,GitHub star數(shù)從0漲到800+,Hacker News討論帖熱度前三。評(píng)論區(qū)最高贊是:「終于有人把PHP的簡(jiǎn)潔和React的組件化縫在一起了。」
誰(shuí)該試試,誰(shuí)該繞道
Luxaura的適用場(chǎng)景寫得很誠(chéng)實(shí):想減少文件碎片、希望后端邏輯物理隔離、需要靜態(tài)HTML首屏性能、討厭配置腳手架的重復(fù)勞動(dòng)。
不適合的也很明顯:團(tuán)隊(duì)已有成熟的Next.js基建、依賴大量第三方React生態(tài)、需要精細(xì)控制服務(wù)端渲染策略。
作者正在做的橫向測(cè)評(píng)值得觀察——同一款應(yīng)用,分別用React、Next.js、Luxaura實(shí)現(xiàn),代碼量、構(gòu)建時(shí)間、運(yùn)行時(shí)性能的全面對(duì)比。結(jié)果沒(méi)公布,但他在Discord里透露:Luxaura的靜態(tài)生成速度比Next.js快40%,bundle體積小60%,代價(jià)是生態(tài)幾乎為零。
框架戰(zhàn)爭(zhēng)從來(lái)不是技術(shù)優(yōu)劣的單選題。React能贏,是因?yàn)镕acebook背書+社區(qū)慣性+招聘市場(chǎng)的沉沒(méi)成本。Luxaura的賭注是:足夠多獨(dú)立開(kāi)發(fā)者愿意為了一體化體驗(yàn),放棄生態(tài)紅利。
npm install luxaura之后,你會(huì)先用它寫什么?一個(gè)內(nèi)部工具,還是賭一把,把 side project 全押上去?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.