GithubHelp home page GithubHelp logo

weblfe / ethereumjs-monorepo Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ethereumjs/ethereumjs-monorepo

0.0 0.0 0.0 45.32 MB

Monorepo for the Ethereum VM TypeScript Implementation

JavaScript 1.86% Python 0.14% TypeScript 97.65% Shell 0.32% HTML 0.01% Solidity 0.03%

ethereumjs-monorepo's Introduction

EthereumJS Monorepo

Code Coverage Discord

This was originally the EthereumJS VM repository. On Q1 2020 we brought some of its building blocks together to simplify development. Below you can find the packages included in this repository.

๐Ÿšง Please note that the master branch is updated on a daily basis, and to inspect code related to a specific package version, refer to the tags.

package npm issues tests coverage
@ethereumjs/block NPM Package Block Issues Actions Status Code Coverage
@ethereumjs/blockchain NPM Package Blockchain Issues Actions Status Code Coverage
@ethereumjs/client NPM Package Client Issues Actions Status Code Coverage
@ethereumjs/common NPM Package Common Issues Actions Status Code Coverage
@ethereumjs/devp2p NPM Package Devp2p Issues Actions Status Code Coverage
@ethereumjs/ethash NPM Package Ethash Issues Actions Status Code Coverage
merkle-patricia-tree NPM Package Trie Issues Actions Status Code Coverage
@ethereumjs/tx NPM Package Tx Issues Actions Status Code Coverage
@ethereumjs/vm NPM Package VM Issues Actions Status Code Coverage

Coverage report

Detailed version can be seen on Codecov.io

Code Coverage

Package dependency relationship

diagram

Development quick start

First, make sure you have the ethereum-tests git submodule, by running:

git submodule init
git submodule update

This monorepo uses Lerna. It links the local packages together, making development a lot easier.

TLDR: Setup

npm install
npm run build

TLDR: To update dependencies and (re-)link packages

npm run bootstrap
npm run build

Above is the quickest way to set you up. Going down the road, there are two sets of commands: project and package-specific commands. You can find them at ./package.json and ./packages/*/package.json, respectively. Here's a breakdown:

Project scripts โ€” run from repository root

npm install

Adds dependencies listed in the root package. Also, it executes the bootstrap script described below, installing all sub-packages dependencies.

npm run bootstrap

Installs dependencies for all sub-packages, and links them to create an integrated development environment.

npm run build

Builds all monorepo packages by default. If a scope is provided, it will only build that particular package.

Scoped example, that will only build the VM package: npm run build -- --scope @ethereumjs/vm

npm run build:tree -- --scope @ethereumjs/blockchain

Builds all local packages that the provided package depends on (e.g.: @ethereumjs/blockchain), and builds itself.

If no scope is provided, npm run build:tree, will build all sub-packages.

npm run clean

Removes root and packages node_modules directories, and other generated files, like coverage, dist and others. This is useful to run after changing branches, to have a clean slate to work with.

npm run lint and npm run lint:fix

These scripts execute lint and lint:fix respectively, to all monorepo packages. Worth noting that there is a git hook in place that runs npm run lint for every git push. This check can be skipped using git push [command] --no-verify.

Package scripts โ€” run from ./packages/<name>

โš ๏ธ Important: if you run npm install from the package directory, it will remove all links to the local packages, pulling all dependencies from npm. Run npm install from the root only.

There's a set of rather standardized commands you will find in each package of this repository.

npm run build

Uses TypeScript compiler to build source files. The resulting files can be found at packages/<name>/dist.

npm run coverage

Runs whatever is on npm run test script, capturing testing coverage information. By the end, it displays a coverage table. Additional reports can be found at packages/<name>/coverage/.

npm run docs:build

Generates package documentation and saves them to ./packages/<name>/docs.

npm run lint

Checks code style according to the rules defined in ethereumjs-config.

npm run lint:fix

Fixes code style according to the rules. Differently from npm run lint, this command actually writes to files.

npm run test

Runs the package tests.

Note that the VM has several test scopes - refer to packages/vm/package.json for more info.

Going further

As this project is powered by Lerna, you can install it globally to enjoy lots more options. Refer to Lerna docs for additional commands.

  • npm install -g lerna
  • lerna run
  • lerna exec

Cleaning node_modules

Hoisting is enabled so dependencies are moved to the root node_modules. lerna clean does not remove the root node_modules so for convenience you can use the project script npm run clean.

Testing packages locally on other projects

There are some ways you can link this repository packages to other projects before publishing. You can symlink dependencies with npm link <package>, or install packages from the filesystem using npm install <folder>. But they are subject to some externalities and most importantly with how your package manager handles the lifecycle of packages during installs.

Note: Git references do not work with monorepo setups out of the box due to the lack of directory traversal on the syntax. E.g.:

npm install [email protected]:ethereumjs/ethereumjs-vm.git

One way to fetch packages remotely from GitHub before publishing is using gitpkg.now.sh.

But there's a cleaner way to manage your dependencies using Verdaccio.

Install Verdaccio

Verdaccio is an npm registry and proxy that can be of great help to test packages locally. Check out their Getting Started guide.

Installs, hoists dependencies and builds packages

npm install

Publish monorepo packages to Verdaccio

lerna exec "npm publish --registry http://localhost:4873 --ignore-scripts"

Unpublish all monorepo packages from Verdaccio

lerna exec "npm unpublish $LERNA_PACKAGE_NAME --registry http://localhost:4873 --force"

Setup @ethereumjs scope to local Verdaccio server

npm config set @ethereumjs:registry http://localhost:4873

Teardown @ethereumjs scope to local Verdaccio server

npm config delete @ethereumjs:registry

EthereumJS

See our organizational documentation for an introduction to EthereumJS as well as information on current standards and best practices.

If you want to join for work or do improvements on the libraries have a look at our contribution guidelines.

LICENSE

MIT

ethereumjs-monorepo's People

Contributors

holgerd77 avatar ryanio avatar axic avatar evertonfraga avatar s1na avatar wanderer avatar kumavis avatar alcuadrado avatar jochem-brouwer avatar vpulim avatar cgewecke avatar jwasinger avatar cdetrio avatar danjm avatar dryajov avatar fanatid avatar rumkin avatar greenkeeper[bot] avatar whymarrh avatar youfoundron avatar alextsg avatar chikeichan avatar mattdean-digicatapult avatar greenkeeperio-bot avatar sdtsui avatar pinkiebell avatar jbaylina avatar mikeseese avatar kvhnuke avatar aakilfernandes avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.