Open illbexyz opened 2 months ago
@illbexyz Can you try using onnxruntime 1.19 in a clean environment?
@satyajandhyala This is already the most minimal reproduction I could give. It's just onnxruntime-web
added to a bare Next.js project initialized with npx create-next-app@latest
.
Script at 'file:///Users/alberto.nicoletti/node_modules/onnxruntime-web/dist/ort.bundle.min.mjs' cannot be accessed from origin 'http://localhost:3000'.
This is a known issue. If you use webpack loading onnxruntime-web as ESM, you need this line in your webpack config:
module: { parser: { javascript: { importMeta: false } } },
Explaination: onnxruntime-web use import.meta.url
at runtime to determine the script path so that it is able to create worker with correct path. However the default behavior of Webpack rewrites import.meta.url
into a static local file path ( in your case file:///Users/alberto.nicoletti/node_modules/onnxruntime-web/dist/ort.bundle.min.mjs
) and it won't work at runtime. the highlighted line in the config disabled this specific behavior of webpack.
May be a good idea to update our document/examples.
Hey @fs-eire, thanks for your time!
I tried adding the following to next.config.mjs
:
webpack: (config) => {
config.module.parser.javascript.importMeta = false;
return config;
},
But now I get a different error:
SyntaxError: Cannot use 'import.meta' outside a module
I updated the reproductions if you wanna have a look.
I made a PR #22196. Hope to workaround this issue without having to modify webpack config from user side.
This issue has been automatically marked as stale due to inactivity and will be closed in 30 days if no further activity occurs. If further support is needed, please provide an update and/or more details.
The issue is not resolved. I am still working on it.
@fs-eire I'm also facing similar issue. Were you able to create a fix for it?
It is still on my list. However I have multiple tasks to do so it may take a while. #22196 is an attempt but testing result shows that it does not fix everything. #22615 is the issue that tracks and explains why it is hard to fix.
I would be appreciated if anyone can help contribute or provider detailed information/clues to the issue.
@fs-eire until the issue is fixed for good, it would great to have a way to patch onnxruntime-web
to work for the specific case of Next.js/Webpack. Can you please point me in the right direction?
@illbexyz if you are OK with loading the .mjs file and .wasm file dynamically from CDN, here is the steps:
.bundle
file. you can either patch the package.json of onnxruntime-web, or add a resolve rule in your webpack config to achieve this. Or you can import onnxruntime-web as UMD instead of ESM.ort.env.wasm.wasmPaths
:
ort.env.wasm.wasmPaths = {
mjs: 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.20.1/dist/ort-wasm-simd-threaded.mjs',
wasm: 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.20.1/dist/ort-wasm-simd-threaded.wasm'
};
Describe the issue
I get the following error when using
onnxruntime-web
on Next.js with web workers:Error: no available backend found. ERR: [wasm] TypeError: Failed to fetch, [cpu] Error: multiple calls to 'initWasm()' detected.
I had no issues with
onnxruntime-web@1.18.0
.I believe the issue is that Next.js is trying to load the file from the filesystem:
file:///Users/alberto.nicoletti/node_modules/onnxruntime-web/dist/ort.bundle.min.mjs
Additional notes:
onnx.env.wasm.numThreads = 2
Error: no available backend found. ERR: [wasm] SecurityError: Failed to construct 'Worker': Script at 'file:///Users/alberto.nicoletti/node_modules/onnxruntime-web/dist/ort.bundle.min.mjs' cannot be accessed from origin 'http://localhost:3000'., [cpu] Error: previous call to 'initWasm()' failed.
.Network requests screenshot:
To reproduce
The following reproductions are a bare Next.js 14 starter repository with
onnxruntime@1.19.2
.onnx.env.wasm.proxy = true
.onnx.env.wasm.numThreads = 2
.crossOriginIsolation
headers here: https://github.com/illbexyz/nextjs-onnxruntime/blob/wasm-threads/next.config.mjsUrgency
Kinda urgent: every Next.js project is impacted.
ONNX Runtime Installation
Released Package
ONNX Runtime Version or Commit ID
1.19.2
Execution Provider
'wasm'/'cpu' (WebAssembly CPU)