Fix ESM import compatibility using globalThis #112
Merged
+11
−2
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.