Nuxt3 & Serverless 嘗鮮之旅

Image

Nuxt3 & Serverless 嘗鮮之旅

前言

Nuxt3 這個月剛出沒多久壮啊,目前還在 beta 階段,難以上生產(chǎn)環(huán)境。官方也推薦我們的 Nuxt2 項(xiàng)目铝噩,先遷移到 Nuxt Bridge 來進(jìn)行一個平滑的過渡漂辐。

不過我們還是有必要預(yù)先體會一下 Nuxt3Nuxt2 之間的異同點(diǎn)钻弄,來為我們的項(xiàng)目預(yù)先累積一些遷移知識。

Quick Start

執(zhí)行命令: npx nuxi init nuxt3-app

Nodejs 版本最低為 ^14(LTS) , 國內(nèi)有可能出現(xiàn)初始化失敗者吁,可以直接去 https://github.com/nuxt/starter/tree/v3 下載模板窘俺。

Usage

除了 vue3 那些用法之外,可以看到 nuxt3 文檔中廣泛使用了 setup 的用法复凳。同時(shí)對 ts 的支持也更好了瘤泪。

同時(shí)以 別名(Alias) 為例:

"#app": [
  "node_modules/nuxt3/dist/app"
],
"#app/*": [
  "node_modules/nuxt3/dist/app/*"
],
"#meta": [
  "node_modules/nuxt3/dist/meta/runtime"
],
"#meta/*": [
  "node_modules/nuxt3/dist/meta/runtime/*"
],
"#build": [
  ".nuxt"
],
"#build/*": [
  ".nuxt/*"
]

這樣在我們的代碼里,會出現(xiàn)許多的 import { ... } from '#app'育八,相比于直接 import { ... } from 'vue' 对途,這種的思路還是很值得我們學(xué)習(xí)的,依靠這種方法髓棋,即封裝了那些原始的底層 API实檀,同時(shí)也保障了一定的開發(fā)體驗(yàn)惶洲。

Directory structure

接下來簡單介紹一些目錄上的變更,還有和 Nuxt2 的異同點(diǎn):

components

Nuxt automatically imports any components in your components/ directory

Nuxt3 會自動導(dǎo)入在 components 目錄里的組件膳犹,這個就有點(diǎn) uni-appeasycom 那味了恬吕。

實(shí)際是繼承自 Nuxt2 中的 @nuxt/components , 掃描代碼中出現(xiàn)的組件來達(dá)到 build 時(shí)的一種 "Tree Shaking"

composables

這個在Nuxt2沒有须床,是 3 新加的文件夾铐料,類似于我們寫 react 時(shí)存放的一些公共 hooks ,值得注意的是這個文件夾也是全局 自動導(dǎo)入 的豺旬。

pages

pages 這一塊大抵和原先類似钠惩,不過值得注意的是,動態(tài)路由(Dynamic Routes)有變化 族阅,它拋棄了原先那種 \_xxx 變量的用法篓跛,命名變得和 nextjs 類似了。

plugins

plugins 改動最大的地方坦刀,就是它無需在 nuxt.config.[ts/js] 中手動注冊了愧沟,只要放在這個目錄里的,都會進(jìn)行 自動注冊(auto-registered)求泰。

照理說央渣,按照之前 Nuxt2 的思路,這時(shí)候要進(jìn)行插件的運(yùn)行時(shí)區(qū)分渴频,就要手動命名為 .ts/.client.ts/.server.ts 芽丹,以此來代表 runtime: all/client-only/server-only 了,目前這塊文檔沒有提及卜朗,可能目前走的還是條件編譯的路子拔第,即 process.server,process.client 加代碼分支的路子。

server

server 這個文件夾场钉,有點(diǎn)像原先 serverMiddleware 的用法蚊俺,里面存放著一些 服務(wù)端中間件 還有 API endpoints

這里有一點(diǎn)值得一說:

Nuxt2 使用 connect 作為內(nèi)置的 server 框架

Nuxt3 使用 h3 來取代了 connect, h3Nuxt團(tuán)隊(duì)編寫的一個
輕量級框架逛万,擁有許多的改進(jìn)泳猬,比如高可移植性,可以完美的工作在 Serverless , Workers ,Node.js 這些運(yùn)行環(huán)境里宇植。

同時(shí)它也能兼容 connect/express 這類的中間件得封,從而利用他們的現(xiàn)有生態(tài)。

筆者粗略的看了一下代碼指郁,發(fā)現(xiàn)它就像一個用 ts 重寫的現(xiàn)代版 connect (version 0.3.3版本)

設(shè)計(jì)理念

這么多自動導(dǎo)入的目錄忙上,感覺設(shè)計(jì)上一直在為 vue3 setup 的語法服務(wù)。

可以預(yù)料到闲坎,相比 Nuxt2 疫粥,3 的開發(fā)體驗(yàn)茬斧,應(yīng)該會變得 "很直接"

同時(shí)它做了大量的優(yōu)化梗逮,寫了一個 Server Engine named Nitro项秉,這個就很厲害,它也是 跨平臺(Cross-platform)Serverless 友好的库糠。

看了它在服務(wù)端這塊伙狐,對 Serverless 優(yōu)化了如此之多涮毫,筆者不得不使用 Serverless 去部署一番瞬欧,親身體會一下這些改進(jìn)了。

Serverless Deployment

這里演示一下罢防,部署到騰訊云 SCF 的流程

準(zhǔn)備工具: Docker,Serverless Framework

Q: 為什么要用 Docker艘虎?

A: 因?yàn)槟壳膀v訊云的 Nodejs 版本只能支持到 12.16,而 Nuxt3 最低的要求版本為 14咒吐。所以這時(shí)候我們必須去自定義運(yùn)行時(shí)環(huán)境野建,來提升 Nodejs 的版本,于是就需要用到自定義鏡像部署這個功能恬叹。

鏡像上傳到個人私有倉庫

準(zhǔn)備一份簡單的 Dockerfile:

FROM node:14-alpine

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json yarn.lock /usr/src/app/

RUN yarn --prod

COPY ./.output /usr/src/app/.output

EXPOSE 9000

ENTRYPOINT ["yarn" ,"start"]

其中 yarn start 指令為候生,nuxt3 build 后 ,node 對 0.0.0.0:9000 端口的監(jiān)聽

把鏡像打出來之后绽昼,再 push 到騰訊云的個人私有倉庫里唯鸭,然后把 IMAGE_URI 拼接出來,作為 serverless.yml 的配置硅确。

比如說我的公開的鏡像地址為:

ccr.ccs.tencentyun.com/tcb-100006794960-iuit/web-ssr-nuxt3-scf-demo:v1.0.1@sha256:1b29d131966f5278d35ef406dfcf9dc8acd07db04c4409494e8d55fd1dcac248

接著目溉,再使用 serverless frameworkcomponents deploy 指令,一鍵式鏡像部署到 SCF 菱农,我們的 Nuxt3 應(yīng)用缭付,就成功的部署到了公網(wǎng)上。

為此循未,筆者也寫了一個騰訊云部署的 Nuxt3 模板:

https://github.com/sonofmagic/serverless-nuxt3-template

有興趣的陷猫,可以參照文章進(jìn)行部署,或者直接拉取筆者的公有鏡像進(jìn)行部署的妖,都是可以的绣檬。

尾言

Nuxt3vue3 出來將近 1年半 之后 ,姍姍來遲羔味,還是很驚喜的河咽,祝愿它也能達(dá)到 nextjs的高度,未來可期赋元。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忘蟹,一起剝皮案震驚了整個濱河市飒房,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媚值,老刑警劉巖狠毯,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異褥芒,居然都是意外死亡嚼松,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門锰扶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來献酗,“玉大人,你說我怎么就攤上這事坷牛『辟耍” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵京闰,是天一觀的道長颜及。 經(jīng)常有香客問我,道長蹂楣,這世上最難降的妖魔是什么俏站? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮痊土,結(jié)果婚禮上肄扎,老公的妹妹穿的比我還像新娘。我一直安慰自己施戴,他們只是感情好反浓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赞哗,像睡著了一般雷则。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肪笋,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天月劈,我揣著相機(jī)與錄音,去河邊找鬼藤乙。 笑死猜揪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坛梁。 我是一名探鬼主播而姐,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼划咐!你這毒婦竟也來了拴念?” 一聲冷哼從身側(cè)響起钧萍,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎政鼠,沒想到半個月后风瘦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡公般,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年万搔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片官帘。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞬雹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遏佣,到底是詐尸還是另有隱情挖炬,我是刑警寧澤揽浙,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布状婶,位于F島的核電站,受9級特大地震影響馅巷,放射性物質(zhì)發(fā)生泄漏膛虫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一钓猬、第九天 我趴在偏房一處隱蔽的房頂上張望稍刀。 院中可真熱鬧,春花似錦敞曹、人聲如沸账月。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽局齿。三九已至,卻和暖如春橄登,著一層夾襖步出監(jiān)牢的瞬間抓歼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工拢锹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谣妻,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓卒稳,卻偏偏與公主長得像蹋半,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子充坑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容