Improve compatibility with application bundlers #20
+201
−193
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
eccrypto
to be used with bundlers that package Node.js app into a single executable (specifically, with nexe/nexe). There are two changes.Avoid using
return
outside of a functionNode.js allows out-of-function
return
due 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 likenexe
don'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
.node
extension when requiring native moduleBundlers that support bundling native modules, like
nexe
, need to know whichrequire
calls load native modules. To distinguish them from usualrequire
calls,nexe
looks at the extension which therequire
'd path ends with, and assumes it's native module if it ends with.node
. Currently,eccrypto
requires its native lib,./build/Release/ecdh
, without the extension, which preventsnexe
from handling it specially.