mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-17 21:10:43 +00:00
### Description <!-- Describe your changes. --> This PR tries to fix #22615. (see detailed description in the issue) A perfect solution would be too difficult to make, because there are a huge number of combinations of usage scenarios, including combinations of development framework, bundler, dev/prod mode, and so on. This PR is using the following approach: - Introduce a new type of end to end test: export test. This type of tests are complete web apps that use popular web development frameworks, and the tests are using puppeteer to run the apps and check if the apps can run without error. - added one nextjs based web app and one vite based web app. - In the test, perform the following test steps: - `npm install` for packages built locally - `npm run dev` to start dev server and use puppeteer to launch the browser to test - `npm run build && npm run start` to test prod build and use puppeteer to launch the browser to test - Make changes to ort-web, including: - special handling on Webpack's behavior of rewriting `import.meta.url` to a `file://` string - revise build definitions - fix wasm URL for proxy, if used in a bundled build
88 lines
2.8 KiB
TypeScript
88 lines
2.8 KiB
TypeScript
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
|
|
/**
|
|
* The interface BuildDefinitions contains a set of flags which are defined at build time.
|
|
*
|
|
* Those flags are processed in bundler for tree shaking to remove unused code.
|
|
* No flags in this file should present in production build.
|
|
*/
|
|
interface BuildDefinitions {
|
|
// #region Build definitions for Tree Shaking
|
|
|
|
/**
|
|
* defines whether to disable the whole WebGL backend in the build.
|
|
*/
|
|
readonly DISABLE_WEBGL: boolean;
|
|
/**
|
|
* defines whether to disable the whole WebGpu/WebNN backend in the build.
|
|
*/
|
|
readonly DISABLE_JSEP: boolean;
|
|
/**
|
|
* defines whether to disable the whole WebAssembly backend in the build.
|
|
*/
|
|
readonly DISABLE_WASM: boolean;
|
|
/**
|
|
* defines whether to disable proxy feature in WebAssembly backend in the build.
|
|
*/
|
|
readonly DISABLE_WASM_PROXY: boolean;
|
|
/**
|
|
* defines whether to enable bundling the wasm JS in the build.
|
|
*
|
|
* The "wasm JS" is the JavaScript file generated by Emscripten when compiling the WebAssembly code.
|
|
* It is usually one of the following files:
|
|
* - `ort-wasm-simd-threaded.mjs`
|
|
* - `ort-wasm-simd-threaded.jsep.mjs`
|
|
*
|
|
* The value is valid only when it's an ESM build.
|
|
*/
|
|
readonly ENABLE_BUNDLE_WASM_JS: boolean;
|
|
|
|
// #endregion
|
|
|
|
// #region Build definitions for ESM
|
|
|
|
/**
|
|
* defines whether the build is ESM.
|
|
*/
|
|
readonly IS_ESM: boolean;
|
|
/**
|
|
* placeholder for the import.meta.url in ESM. in CJS, this is undefined.
|
|
*/
|
|
readonly ESM_IMPORT_META_URL: string | undefined;
|
|
|
|
// #endregion
|
|
|
|
/**
|
|
* placeholder for the bundle filename.
|
|
*
|
|
* This is used for bundler compatibility fix when using Webpack with `import.meta.url` inside ESM module.
|
|
*
|
|
* The default behavior of some bundlers (eg. Webpack) is to rewrite `import.meta.url` to the file local path at
|
|
* compile time. This behavior will break the following code:
|
|
* ```js
|
|
* new Worker(new URL(import.meta.url), { type: 'module' });
|
|
* ```
|
|
*
|
|
* This is because the `import.meta.url` will be rewritten to a local path, so the line above will be equivalent to:
|
|
* ```js
|
|
* new Worker(new URL('file:///path/to/your/file.js'), { type: 'module' });
|
|
* ```
|
|
*
|
|
* This will cause the browser fails to load the worker script.
|
|
*
|
|
* To fix this, we need to align with how the bundlers deal with `import.meta.url`:
|
|
* ```js
|
|
* new Worker(new URL('path-to-bundle.mjs', import.meta.url), { type: 'module' });
|
|
* ```
|
|
*
|
|
* This will make the browser load the worker script correctly.
|
|
*
|
|
* Since we have multiple bundle outputs, we need to define this placeholder in the build definitions.
|
|
*/
|
|
readonly BUNDLE_FILENAME: string;
|
|
}
|
|
|
|
declare const BUILD_DEFS: BuildDefinitions;
|