-
Notifications
You must be signed in to change notification settings - Fork 16.3k
Description
Preflight Checklist
- I have read the Contributing Guidelines for this project.
- I agree to follow the Code of Conduct that this project adheres to.
- I have searched the issue tracker for a bug report that matches the one I want to file, without success.
Electron Version
21
What operating system are you using?
Ubuntu
Operating System Version
Ubuntu 20.04
What arch are you using?
x64
Last Known Working Electron version
20
Expected Behavior
The NodeJS docs, state that the Node-API is stable api, intended so that modules do not need recompiling to work with newer version of NodeJS.
While I do not see Electron being referenced on that page, as Electron wraps specific versions of NodeJS and I have not seen reference to not following that stability guarantee, I would expect that Electron would follow the same Node-API support and stability promises as the version of NodeJS being wrapped.
At the very least, the NodeJS docs should be updated to make the methods deprecated or have a compatability warning, but ideally they shouldnt be broken at all.
Actual Behavior
In the blog post about enabling of v8 memory cages, it clearly states that "native modules which rely on this functionality in V8 will need to be refactored to continue working in Electron 20 and later.", which violates the Node-API stability.
The docs do say "This is a fairly rare use case", but out of the 5 native modules I have contributed to, all of them use this technique. So from my experience, every native nodejs module is now a liability.
https://www.npmjs.com/package/sharp is a good example of an incredibly popular library that breaks because of this
Testcase Gist URL
No response
Additional Information
I am now facing the dilemma of how to handle this breaking api issue. I could:
- always do an extra memcpy and worsen performance unnecessarily for nodejs users
- produce separate builds for nodejs and electron like we used to with nan
Of course, this doesnt help in cases where the module author is unaware of this electron incompatability, which I expect will be a lot of them. Without proper documentation in the node-api docs, how would they be expected to know?
I expect that this api breakage will cause users of them a lot of pain in transitioning to electron 21. This could end up with long chains of users waiting for dependencies of dependencies to update before they can update electron