バンドラ設定
formulon-cell は pthread 有効版の @libraz/formulon WASM モジュールを 再利用します。そのため UI パッケージにも、エンジン本体と同じブラウザ向け バンドル条件が必要です。
Vite
ts
import { defineConfig } from 'vite'
export default defineConfig({
server: {
headers: {
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp'
}
},
preview: {
headers: {
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp'
}
},
optimizeDeps: {
exclude: ['@libraz/formulon-cell', '@libraz/formulon']
},
build: {
target: 'es2022'
},
worker: {
format: 'es'
}
})なぜ必要か
上の server / preview ヘッダは、ローカルの Vite 配信だけを対象にします。 本番ホストでも spreadsheet エンジンを動かすページには同じ COOP / COEP ヘッダを付けてください。
Worker は ES module として出力してください。Formulon の再計算スケジューラは Emscripten 由来の module worker として起動します。
メインと worker の build target は ES2022 にします。エンジン wrapper が top-level await と条件付き dynamic import を使うためです。
依存 pre-bundling からは @libraz/formulon-cell と @libraz/formulon の両方を 外します。Worker / WASM アセット解決を Emscripten wrapper とアプリの バンドラに任せるためです。
COOP / COEP ヘッダは SharedArrayBuffer のために必要です。ヘッダがない場合、 WorkbookHandle.createDefault() はスタブエンジンへフォールバックします。