ViteでWebWorkerを利用するコードをビルドする時はbaseプロパティを忘れない
具体的には以下のようなコードでWebWorkerに読み込ませたいscriptを相対パスで指定すると、ビルド時にpathをよしなに解決してくれる code:workerSample.ts
const worker = new SharedWorker(new URL('./worker-script.ts', import.meta.url), {
type: 'module',
name: 'web-worker',
});
はずなのだが、vite.config.tsで以下のようにbaseプロパティを指定しないとimport.meta.urlを使ってうまく解決してくれない
code:vite.config.ts
export default defineConfig(({ mode }) => ({
base: './',
// ...
}));
baseプロパティを指定しないと起こること
new URL('./worker-script.ts', import.meta.url) が new URL('./assets/worker-script-abcdef.js', self.location)のように解決されてしまう
import.meta.urlが「評価されたモジュールのファイルのURL」を返すことを利用してworkerに読み込ませたいscriptを相対パスで解決できていたのに.....
baseプロパティを指定すると以下のように解決される
new URL(""+new URL("assets/worker-script-abcdef.js",import.meta.url).href,self.location)
なんでここの解決の挙動が変わるのか分かってないので