1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 11:22:43 +02:00
metamask-extension/development/build
Mark Stacey 4338454e1d
Fix builds from forks (#12485)
Recently validation was added for our build configuration as part of
the PR #12438. This had the unintended consequence of making all builds
from forks fail because they don't get secrets injected. Specifically
it was the missing `INFURA_PROJECT_ID` that made the builds fail.

The Infura project ID is no longer required for building. In practice
it's still required for doing anything with a build but running e2e
tests, but that's all we need to do in CI anyway.
2021-10-26 10:41:39 -02:30
..
transforms Add build type to Sentry environment (#12441) 2021-10-25 14:27:30 -02:30
display.js Rationalize build system arguments (#12047) 2021-09-09 12:44:57 -07:00
etc.js Add build type to Sentry environment (#12441) 2021-10-25 14:27:30 -02:30
index.js Add build type to Sentry environment (#12441) 2021-10-25 14:27:30 -02:30
manifest.js Add build type to Sentry environment (#12441) 2021-10-25 14:27:30 -02:30
README.md Migrate beta version to the main version field (#12246) 2021-10-06 15:14:48 -02:30
sass-compiler.js Add Lavamoat to build system (#9939) 2021-02-22 22:43:29 +08:00
scripts.js Fix builds from forks (#12485) 2021-10-26 10:41:39 -02:30
static.js Add build type to Sentry environment (#12441) 2021-10-25 14:27:30 -02:30
styles.js remove the ui/app and ui/lib folders (#10911) 2021-04-28 14:53:59 -05:00
task.js Build: Lint files after removing their code fences (#12075) 2021-09-15 17:18:28 -10:00
utils.js Add build type to Sentry environment (#12441) 2021-10-25 14:27:30 -02:30

The MetaMask Build System

tl;dr yarn dist for prod, yarn start for local development

This directory contains the MetaMask build system, which is used to build the MetaMask Extension such that it can be used in a supported browser. From the repository root, the build system entry file is located at ./development/build/index.js.

Several package scripts invoke the build system. For example, yarn start creates a watched development build, and yarn dist creates a production build. Some of these scripts applies lavamoat to the build system, and some do not. For local development, building without lavamoat is faster and therefore preferable.

The build system is not a full-featured CLI, but rather a script that expects some command line arguments and environment variables. For instructions regarding environment variables, see the main repository readme.

Generally speaking, the build system consists of gulp tasks that either manipulate static assets or bundle source files using Browserify. Production-ready zip files are written to the ./builds directory, while "unpacked" extension builds are written to the ./dist directory.

Our JavaScript source files are transformed using Babel, specifically using the babelify Browserify transform. Source file bundling tasks are implemented in the ./development/build/scripts.js.

Locally implemented Browserify transforms, some of which affect how we write JavaScript, are listed and documented here.

Usage

Usage: yarn build <entry-task> [options]

Commands:
  yarn build prod       Create an optimized build for production environments.

  yarn build dev        Create an unoptimized, live-reloaded build for local
                        development.

  yarn build test       Create an optimized build for running e2e tests.

  yarn build testDev    Create an unoptimized, live-reloaded build for running
                        e2e tests.

Options:
  --build-type        The "type" of build to create. One of: "beta", "main"
                                                      [string] [default: "main"]
  --lint-fence-files  Whether files with code fences should be linted after
                      fences have been removed by the code fencing transform.
                      The build will fail if linting fails.
                      Defaults to `false` if the entry task is `dev` or
                      `testDev`, and `true` otherwise.
                                                   [boolean] [default: <varies>]
  --omit-lockdown     Whether to omit SES lockdown files from the extension
                      bundle. Useful when linking dependencies that are
                      incompatible with lockdown.
                                                      [boolean] [default: false]
  --skip-stats        Whether to refrain from logging build progress. Mostly
                      used internally.
                                                      [boolean] [default: false]