fa336b5137
The "scripts" portion of the build script has been refactored to pass the "build target" throughout the file. The "build target" is the target environment for the build, reflected by the command used to start the build (e.g. "dev", "prod", "test", or "testDev"). Beforehand we derived the variables `devMode` and `testing` from this build target, and passed these throughout the script. However, there is a future change [1] that requires adding a new build target that acts like "prod" in some ways but not others. It was easier to refactor to pass through `buildTarget` directly than it was to add a _third_ boolean flag to indirectly represent the target. The existence of the "testDev" target made it convenient to still have the `testing` and `devMode` flag, so helper functions were added to derive those values from the build target. I anticipate that these will only be needed temporarily though. We will probably be able to get rid of the `testDev` target and the related complexities when we start adding more flags (like `--watch`[2] and `--minify`[3]) to the build script directly. [1]: https://github.com/MetaMask/metamask-extension/issues/15003 [2]: https://github.com/MetaMask/metamask-extension/issues/12767 [3]: https://github.com/MetaMask/metamask-extension/issues/12768 |
||
---|---|---|
.. | ||
transforms | ||
constants.js | ||
display.js | ||
etc.js | ||
index.js | ||
manifest.js | ||
README.md | ||
sass-compiler.js | ||
scripts.js | ||
static.js | ||
styles.js | ||
task.js | ||
utils.js |
The MetaMask Build System
tl;dr
yarn dist
for prod,yarn start
for local development. Add--build-type flask
to build Flask, our canary distribution with more experimental features.
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
See node ./development/build/index.js --help