vite icon indicating copy to clipboard operation
vite copied to clipboard

Importing TypeScript files with `?url` suffix result in the file not being transpiled

Open FezVrasta opened this issue 1 year ago • 4 comments

Describe the bug

I'm using the ?url suffix to import a TypeScript file to use it in an AudioWorklet.

import workletUrl from './audio.worklet.ts?url';

const audioContext = new AudioContext();
audioContext.audioWorklet.addModule(workletUrl);

The problem is that Vite is not transpiling my TS file into a JS one, so the worklet fails because of it.

I think Vite should either transpile the files that it knows how to transpile, and return as URL the transpiled file, or a new option should be added to tell Vite to transpile it (e.g. ?url&transpile)

Reproduction

https://github.com/FezVrasta/vite-ts-url-import

System Info

System:
    OS: macOS 12.5.1
    CPU: (10) arm64 Apple M1 Max
    Memory: 2.36 GB / 32.00 GB
    Shell: 5.8.1 - /bin/zsh
  Binaries:
    Node: 16.16.0 - ~/.nvm/versions/node/v16.16.0/bin/node
    Yarn: 1.22.19 - ~/.nvm/versions/node/v16.16.0/bin/yarn
    npm: 8.11.0 - ~/.nvm/versions/node/v16.16.0/bin/npm
    Watchman: 2022.05.16.00 - /opt/homebrew/bin/watchman
  Browsers:
    Brave Browser: 104.1.42.97
    Chrome: 105.0.5195.52
    Firefox: 103.0.1
    Safari: 15.6.1
  npmPackages:
    vite: ^3.0.7 => 3.0.9 

Used Package Manager

npm

Logs

No response

Validations

FezVrasta avatar Sep 01 '22 12:09 FezVrasta

Looks like a bug that it should be transpiled by default, you can workaround it by using new URL('./path/to/file.ts', import.meta.url). Though for AudioWorklet, even if ?url works you might hit https://github.com/vitejs/vite/issues/9606

bluwy avatar Sep 04 '22 09:09 bluwy

I think this is related to https://github.com/vitejs/vite/issues/6757, https://github.com/vitejs/vite/issues/2522#issuecomment-1111024311.

sapphi-red avatar Sep 04 '22 11:09 sapphi-red

Looks like a bug that it should be transpiled by default, you can workaround it by using new URL('./path/to/file.ts', import.meta.url). Though for AudioWorklet, even if ?url works you might hit #9606

Thanks for the reply, using new URL doesn't seem to work, the resulting URL returns 404.

FezVrasta avatar Sep 06 '22 13:09 FezVrasta

I think this is related to #6757, #2522 (comment).

The second looks definitely related, I'm not sure about the first, it seems to be a different problem?

FezVrasta avatar Sep 06 '22 13:09 FezVrasta

There is definitely a regression somewhere. Using import.meta.url results in importing my .ts files as video/m2ts instead of TypeScript.

cedeber avatar Sep 20 '22 04:09 cedeber

Duplicate of #6979

sapphi-red avatar Oct 17 '22 11:10 sapphi-red