Fix ESM import compatibility using globalThis#112
Merged
Conversation
Co-authored-by: ttt43ttt <[email protected]>
Copilot
AI
changed the title
[WIP] Fix opencv-js import compatibility for Edge
Fix ESM import compatibility in browsers
Jan 22, 2026
Contributor
|
@copilot see #44 (comment) |
Co-authored-by: ttt43ttt <[email protected]>
Contributor
Author
Done! Changed to use |
Copilot
AI
changed the title
Fix ESM import compatibility in browsers
Fix ESM import compatibility using globalThis
Jan 27, 2026
ttt43ttt
reviewed
Jan 27, 2026
Co-authored-by: ttt43ttt <[email protected]>
ttt43ttt
approved these changes
Jan 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ESM imports in browsers fail because the UMD wrapper is invoked with
this, which isundefinedin ESM module context, causingrootto be undefined.Changes
}(this, function () {to}(globalThis, function () {on line 22Technical Details
The UMD wrapper was using
thisto pass the global object as therootparameter. In ESM context,thisat the top level isundefined, causing the error "Cannot set properties of undefined (setting 'cv')".Using
globalThisfixes this by providing a universal reference to the global object that works across all JavaScript environments:globalThis===windowglobalThis===globalglobalThis===selfThis single-line change eliminates the need for post-install patching scripts users were applying as workarounds, while maintaining full backward compatibility with CommonJS, AMD, and Web Worker environments.
The
dist/opencv.js.patchfile has been updated to document this change for future reference when building opencv.js from source.Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.