Skip to content
This repository has been archived by the owner on Feb 26, 2024. It is now read-only.

Move and optimize build process from ganache-cli to ganache-core #162

Merged
merged 44 commits into from
Sep 10, 2018

Conversation

davidmurdoch
Copy link
Member

This pull request copies the build process from ganache-cli to ganache-core while also optimizing the resulting webpacked bundle to only include ganache-core's internals plus pure-js implementations of our native transitive dependencies. All other dependencies are installed on install.

Additionally, ganache-core and ganache-cli will now default to using native dependencies, if successfully installed, only falling back to the pure-js implementations if those dependencies can't be installed (i.e., because node-gyp on Windows is tricky).


This PR also purges some unnecessary dependencies from package.json, moves others to devDependencies, and updates and pins the remaining direct dependencies to their latest patch versions (at time of writing), with the exception of:

  • level-sublevel; as version 6.6.5 needlessly regressed to a dependency on a vulnerable version of levelup. 6.6.5 actually looks like it was accidentally published from an older branch named master2. ¯\_(ツ)_/¯
  • ethereumjs-tx; as version 1.3.5 introduced bug Self signed TXs doesn't work ethereumjs/ethereumjs-tx#113 which was not fixed in 1.3.7 in my testing.

On npm publish our tests will automatically be run, the webpack build created, and the tests run again on the new webpacked build. We may want to just trust that Travis will build and test everything for us, but having everything run on publish ensures that we don't ship an old or broken ./build directory (since ./build will not be created on npm install).

Our new .npmignore will ignore most of our unneeded files and directories on npm publish, but it will include ./lib and ./build.

Before npm publishing to production we'll want to test the interaction of the new build steps, our .npmignore, and ./build on a variety of OSes (mainly Windows in different configurations to ensure the non-native fallback method works appropriately), perhaps by temporarily publishing to npm under a different name.


With all that said and done, once axic/scrypt.js#3 is merged and published to npm we'll likely get rid of our node webpack build all together; currently, the only other consideration is eth-block-tracker, which is potentially node 6 incompatible, so we may still want to use its es5 build. Note: secp256k1 already automatically falls back to a pure-JS implementation if a native build isn't possible.

Copy link
Contributor

@mikeseese mikeseese left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed this with @davidmurdoch over Zoom. LGTM! Would merge again 10/10

@mikeseese mikeseese merged commit 22e3af6 into develop Sep 10, 2018
@mikeseese mikeseese deleted the test-portability branch September 10, 2018 17:32
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants