Improve compatibility with application bundlers#20
Open
skozin wants to merge 2 commits intobitchan:masterfrom
Open
Improve compatibility with application bundlers#20skozin wants to merge 2 commits intobitchan:masterfrom
skozin wants to merge 2 commits intobitchan:masterfrom
Conversation
Node.js allows this due to the way globals are implemented there (it wraps all modules into a function), but it's not a correct JavaScript. One of the side-effects of this is that bundlers like nexe/nexe don't work with applications that use eccrypto, as these bundlers use Acorn to parse all sources into AST and then combine them into a single JS file, and Acorn chokes on out-of-function return.
This allow bundlers like nexe/nexe detect this as a native module import and process it accordingly.
Author
|
Not sure why browser tests fail, it appears to be not connected with the code changes. |
Contributor
|
This needs to be rebased from |
|
i have problem like this error Module parse failed: 'return' outside of function (25:4) So, i remove the return statement in node_modules before bundling. |
|
I have the same error. Can it be rebased and merged, please? |
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.
This PR allows
eccryptoto be used with bundlers that package Node.js app into a single executable (specifically, with nexe/nexe). There are two changes.Avoid using
returnoutside of a functionNode.js allows out-of-function
returndue to the way globals are implemented (it wraps all modules into a function), but it's not a correct JavaScript. One of the side-effects of this is that bundlers likenexedon't work with applications that useeccrypto. Bundlers use AST parsers like Acorn to parse all sources into AST and then combine them into a single JS file, and parsers choke on an out-of-function return.Use
.nodeextension when requiring native moduleBundlers that support bundling native modules, like
nexe, need to know whichrequirecalls load native modules. To distinguish them from usualrequirecalls,nexelooks at the extension which therequire'd path ends with, and assumes it's native module if it ends with.node. Currently,eccryptorequires its native lib,./build/Release/ecdh, without the extension, which preventsnexefrom handling it specially.