Remotion LabRemotion Lab
其他Bun 支援

Bun 支援

在 Bun 執行環境中使用 Remotion 的說明、限制與設定方式。

Bun 支援

Bun 是一個高效能的 JavaScript 執行環境,兼容 Node.js API 並提供內建的打包工具和套件管理器。本文說明 Remotion 與 Bun 的相容性現狀。

目前的支援狀況

Remotion 主要針對 Node.js 設計,部分功能與 Bun 相容,但並非全部支援。以下是各功能的支援狀態:

功能支援狀態備注
安裝套件(bun install支援可用 Bun 取代 npm
執行 Remotion CLI部分支援建議使用 Node.js
@remotion/renderer部分支援某些 API 可能有問題
Remotion Studio不建議請使用 Node.js
renderMedia()部分支援需要測試

使用 Bun 安裝套件

你可以使用 Bun 作為套件管理器來安裝 Remotion 的依賴:

bun install remotion @remotion/cli

但執行 Remotion 的指令時,仍建議使用 Node.js 環境:

# 建議:使用 Node.js 執行
npx remotion studio
 
# 不建議:使用 Bun 執行(可能有問題)
bunx remotion studio

在 Bun 專案中使用 Remotion

若你的專案使用 Bun 作為套件管理器,但仍需要用 Node.js 執行 Remotion:

# 使用 Bun 安裝依賴
bun install
 
# 使用 Node.js 執行 Remotion
node node_modules/.bin/remotion studio
# 或
npx remotion studio

package.json 腳本設定

package.json 中,可以明確指定使用 Node.js 執行 Remotion:

{
  "scripts": {
    "start": "node node_modules/.bin/remotion studio",
    "render": "node node_modules/.bin/remotion render MyComp out/video.mp4",
    "build": "bun run build:app"
  }
}

Bun 作為打包工具

Remotion 內部使用 webpack 進行打包,目前不支援用 Bun 的打包工具替換 webpack。若你嘗試自訂 webpack 設定,需要在 remotion.config.ts 中使用 webpack API:

// remotion.config.ts
import { Config } from "@remotion/cli/config";
import { webpackOverride } from "./src/webpack-override";
 
Config.overrideWebpackConfig(webpackOverride);

已知問題

子程序啟動問題

Bun 的子程序(child_process)實作與 Node.js 有些差異,可能影響 Chromium 的啟動:

Error: spawn chrome ENOENT

若遇到此問題,請切換到 Node.js 執行 Remotion。

原生模組相容性

Remotion 使用了部分 Node.js 原生模組(.node 檔案),這些模組在 Bun 中的相容性可能不完整。

什麼時候可以用 Bun?

目前可以安全使用 Bun 的場景:

  1. 套件安裝bun install 完全可用。
  2. 執行非 Remotion 的任務:你的應用程式邏輯(非渲染部分)可以用 Bun 執行。
  3. 測試:若不涉及 Chromium 渲染,部分測試可以用 bun test 執行。

未來展望

Bun 對 Node.js 相容性的支援持續改善中。隨著 Bun 的成熟,Remotion 的相容性可能會逐步提升。建議關注:

小結

  • 可以用 bun install 安裝 Remotion 依賴套件。
  • 執行 Remotion 的渲染與 Studio 功能時,建議使用 Node.js 而非 Bun。
  • Bun 作為套件管理器 + Node.js 作為執行環境是目前最穩定的組合。
  • 隨著 Bun 的持續發展,相容性可能持續改善,請關注官方公告。