Improve compatibility with application bundlers #20
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.