1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 18:00:18 +01:00
metamask-extension/development/build
Erik Marks 3de3765425
Add build-time code exclusion using code fencing (#12060)
This PR adds build-time code exclusion by means of code fencing. For details, please see the README in `./development/build/transforms`. Note that linting of transformed files as a form of validation is added in a follow-up, #12075.

Hopefully exhaustive tests are added to ensure that the transform works according to its specification. Since these tests are Node-only, they required their own Jest config. The recommended way to work with multiple Jest configs is using the `projects` field in the Jest config, however [that feature breaks coverage collection](https://github.com/facebook/jest/issues/9628). That being the case, I had to set up two separate Jest configs. In order to get both test suites to run in parallel, Jest is now invoked via a script, `./test/run-jest.sh`.

By way of example, this build system feature allows us to add fences like this:

```javascript
this.store.updateStructure({
  ...,
  GasFeeController: this.gasFeeController,
  TokenListController: this.tokenListController,
  ///: BEGIN:ONLY_INCLUDE_IN(beta)
  PluginController: this.pluginController,
  ///: END:ONLY_INCLUDE_IN
});
```

Which at build time are transformed to the following if the build type is not `beta`:

```javascript
this.store.updateStructure({
  ...,
  GasFeeController: this.gasFeeController,
  TokenListController: this.tokenListController,
});
```

Co-authored-by: Mark Stacey <markjstacey@gmail.com>
2021-09-14 10:00:04 -07:00
..
transforms Add build-time code exclusion using code fencing (#12060) 2021-09-14 10:00:04 -07:00
display.js Rationalize build system arguments (#12047) 2021-09-09 12:44:57 -07:00
etc.js Rationalize build system arguments (#12047) 2021-09-09 12:44:57 -07:00
index.js Add build-time code exclusion using code fencing (#12060) 2021-09-14 10:00:04 -07:00
manifest.js Rationalize build system arguments (#12047) 2021-09-09 12:44:57 -07:00
README.md Rationalize build system arguments (#12047) 2021-09-09 12:44:57 -07:00
sass-compiler.js Add Lavamoat to build system (#9939) 2021-02-22 22:43:29 +08:00
scripts.js Add build-time code exclusion using code fencing (#12060) 2021-09-14 10:00:04 -07:00
static.js Create MetaMask Beta build (#10985) 2021-09-08 15:08:23 -05:00
styles.js remove the ui/app and ui/lib folders (#10911) 2021-04-28 14:53:59 -05:00
task.js Rationalize build system arguments (#12047) 2021-09-09 12:44:57 -07:00
utils.js Add build-time code exclusion using code fencing (#12060) 2021-09-14 10:00:04 -07:00

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.

Here follows basic usage information for the build system.

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:
  --beta-version     If the build type is "beta", the beta version number.
                                                           [number] [default: 0]
  --build-type       The "type" of build to create. One of: "beta", "main"
                                                      [string] [default: "main"]
  --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]