靜態網站部署 · v0.1

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

now 整合 Firebase Hosting、Azure 與 FTP 的既有部署流程。選好可發布目錄、組好 provider 命令、部署後輸出預設 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

不重寫雲端,
只把部署流程收攏成一步。

不重新實作雲端協定

初版重點是包裝與協調,不是重寫 Firebase Hosting、Azure 或 FTP 的部署邏輯。實際部署交給各 provider 已有的 CLI,你既有的登入狀態與權限都直接沿用。

一致的命令,四個平台

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

設定只存非祕密

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


支援平台

四個 provider,
各自交給各自的 CLI。

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

Firebase Hosting

firebase
firebase deploy --only hosting

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

Azure Blob

azure-blob
az storage blob upload-batch --source <src> --destination '$web' --auth-mode login

Static website 通常用 $web container,搭配 az login--auth-mode login

Azure Static Web Apps

azure-swa
swa deploy <source> --env production

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

FTP

ftp
lftp mirror -R --only-newer

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


三步完成

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

1

建立本機設定

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

$ now config init
2

選擇 provider 並填入設定

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

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

部署並拿到 URL

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

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

設定檔

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

// .now.json · 本機設定,只存非祕密
{
  "provider": "firebase",
  "source": null,
  "base_url": "https://example.web.app",
  "default_url": null,
  "firebase": {
    "project": "my-firebase-project",
    "site": null
  },
  "azure_blob": { "account": "mystorageaccount", "container": "$web" },
  "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 用 az login、SWA 用環境變數、FTP 用環境變數。now config set 也會擋下明顯像祕密的 key。

$ now config doctor # 檢查設定與 provider CLI

安裝

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

$ 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 內目錄。


準備好了嗎?

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