靜態網站部署

一行命令,
把靜態網站交給雲端

now 用一行命令快速部署靜態網站,支援 Firebase Hosting、Azure 與 FTP 等多種 Hosting 提供者;選好可發布目錄,部署後直接取得預設 URL。

開始使用 $ npm install -g @willh/now
macOS Apple / Intel Linux x64 Windows x64 SHA-256 驗證
~/my-site · zsh
# 在專案根目錄直接執行
$ now deploy dist

→ resolving source…        ✓ dist/
→ reading .now.json…      ✓ firebase
→ building command…       
  firebase deploy --only hosting

✔ Deployed!
https://my-project.web.app

為什麼是 now

一支命令,
完成靜態網站部署。

快速完成部署

now 把不同 Hosting 提供者的部署方式整合成一致的操作介面,選擇目錄、設定平台,就能快速完成部署。

一致的命令,四個平台

無論背後是 Firebase Hosting、Azure Storage Blob、Azure Static Web Apps 或 FTP,對你都是同一支 now。換 provider 換設定,不換肌肉記憶。

設定只存非祕密

.now.json 只保存 provider、來源、base_url 這類非機密設定。token、密碼、account key 一律走環境變數或既有 CLI 登入,不進設定檔、不進 repo。


支援平台

四個雲端提供者,
各自交給各自的 CLI。

now 負責選目錄與組命令,實際部署由下列 provider CLI 執行。先裝好對應 CLI、完成登入,now 就能接手。

Firebase Hosting

firebase-hosting
firebase deploy --only hosting

沿用 firebase login 的既有登入狀態。設定 firebase.site 時改用 hosting:<site>

Azure Storage Blob

azure-storage-blob
PUT $web/<file> · Azure Storage Blob REST API

不必裝 Azure CLI。給它一個 container SAS URL,now 就直接用 Azure Storage Blob REST API 把檔案上傳到 $web

Azure Static Web Apps

azure-static-web-app
swa deploy <source> --env production

deployment token 走環境變數 SWA_CLI_DEPLOYMENT_TOKEN,不寫進設定檔。

FTP

any-website-ftp
lftp mirror -R --only-newer

帳號密碼用 NOW_FTP_USERNAME / NOW_FTP_PASSWORD 環境變數。初版只上傳同步,不做遠端刪除。


三步完成

設定、選擇、部署,
然後完成。

1

建立本機設定

在專案根目錄初始化 .now.json,只存非祕密設定。

$ now init
2

選擇 provider 並填入設定

指定 provider 與對應的 project、account 或 host 等非機密欄位。

$ now config set provider firebase-hosting
$ now config set firebase.project my-project
3

部署並拿到 URL

now [path] 等同 now deploy [path]。部署完成後依序挑出預設 URL 並輸出。

$ now deploy dist
→ https://my-project.web.app

臨時通道

還沒要部署,
先讓別人看一眼。

now tunnel 在本機起一個靜態伺服器,再透過 Cloudflare Tunnel 或 Microsoft dev tunnels 把目前資料夾送上一個公開網址。免設定、不需要 .now.json,也不會上傳任何檔案。

~/my-site · zsh
$ now tunnel

Source: ~/my-site/public
Local:  http://127.0.0.1:56160
Tunnel: Cloudflare Tunnel (cloudflared)
Starting tunnel, press Ctrl+C to stop…

Public URL:
https://fuji-mba-fourth.trycloudflare.com

沒裝也不會卡住

兩個通道工具都沒安裝時,now 會依照你的作業系統,直接給出中文安裝指令,不會自作主張幫你裝任何東西。用 devtunnel 而還沒登入時,也會直接問你要不要現在登入。

機密檔案不會外流

本機伺服器只綁 127.0.0.1,只接受 GET,而且永遠不提供 .env.gitnode_modules.now.json 這些排除清單裡的檔案。

$ now tunnel

Cloudflare Tunnel

cloudflared
cloudflared tunnel --url http://127.0.0.1:<port>

免申請帳號、免登入,裝好就能開臨時通道。沒指定時 now 會優先選它。

Microsoft dev tunnels

devtunnel
devtunnel host -p <port> --allow-anonymous

需要 Microsoft Entra ID、Microsoft 或 GitHub 帳號。now 會先檢查登入狀態,未登入就引導你完成 devtunnel user login

通道網址是公開的。任何人拿到網址都能打開,適合臨時預覽與分享,用完請按 Ctrl+C 關掉。


設定檔

兩份設定檔,
一份本機、一份全域。

// .now.json · 本機設定,只存非祕密
{
  "provider": "firebase-hosting",
  "source": null,
  "base_url": "https://example.web.app",
  "default_url": null,
  "firebase": {
    "project": "my-firebase-project",
    "site": null
  },
  "azure_blob": { "sas_url_env": "NOW_AZURE_BLOB_SAS_URL" },
  "azure_swa":  { "environment": "production" },
  "ftp":       { "host": "ftp.example.com", "remote_dir": "/public_html" }
}

合併優先序

CLI flags > .now.json > ~/.config/now/settings.json。本機設定覆寫全域,命令列 flag 覆寫一切。

安全性

token、password、secret、account key 一律不寫進設定檔。Firebase Hosting 用 firebase login、Azure Storage Blob 的 SAS URL 放在 .env,SWA 與 FTP 用環境變數。now config set 也會擋下明顯像祕密的 key。

$ now config doctor

安裝

三種方式,
挑一個順手的。

$ npm install -g @willh/now

npm 套件只含 JavaScript wrapper 與安裝邏輯。安裝時自動從 GitHub Release 下載對應平台原生 binary,並驗證 SHA-256。

$ curl -fsSL https://raw.githubusercontent.com/doggy8088/now/main/install.sh | sh

預設安裝到 $HOME/.local/bin。可用 NOW_INSTALL_DIR=/usr/local/bin 覆寫。

PS> iwr https://raw.githubusercontent.com/doggy8088/now/main/install.ps1 -OutFile install.ps1; .\install.ps1

預設安裝到 $env:LOCALAPPDATA\now\bin。可用 -InstallDir 覆寫。

https://github.com/doggy8088/now/releases/latest

下載對應平台 archive 與同名 .sha256,驗證 checksum 後解壓縮,把 nownow.exe 放進 PATH 內目錄。


準備好了嗎?

建置好靜態資產,一行命令把它交給雲端。