您可以在我们的官方网站上找到最新版本的 MetaMask。如需使用 MetaMask 的帮助,请访问我们的用户支持网站。
对于一般问题、功能请求或开发人员问题,请访问我们的社区论坛。
MetaMask 支持 Firefox、Google Chrome 和基于 Chromium 的浏览器。我们建议使用最新的可用浏览器版本。
要了解最新新闻,请在 X 上关注我们。
要了解如何开发 MetaMask 兼容的应用程序,请访问我们的开发人员文档。
要了解如何为 MetaMask 代码库做出贡献,请访问我们的贡献者文档。
要了解如何为 MetaMask 扩展项目本身做出贡献,请访问我们的扩展文档。
作为在本地计算机上构建的替代方案,有一个新选项可以使用 GitHub Codespaces 在 5 分钟内启动并运行开发环境。请注意,每月免费配额有限,之后 GitHub 将开始向您收费。
注意:您需要按运行时间和使用的存储付费
单击上面的按钮开始
将打开一个新的浏览器选项卡,其中包含 Visual Studio Code 的远程版本(这将需要几分钟的时间来加载)
将在浏览器中打开一个带有 noVNC 的“简单浏览器”——单击“连接”
单击“简单浏览器”选项卡右上角的按钮可在其自己的选项卡中打开 noVNC 窗口
打开左侧的 noVNC 侧边栏,单击齿轮图标,将缩放模式更改为远程调整大小
可选步骤:
首次启动时再等待大约 20 秒,以便脚本完成
右键单击 noVNC 桌面启动预装 MetaMask 的 Chrome 或 Firefox
更改一些代码,然后运行yarn start
以开发模式构建
一两分钟后,它将完成构建,您可以在 noVNC 桌面中看到您的更改
您需要为运行时间和使用的存储付费
代码空间在 30 分钟不活动后暂停,并在 30 天不活动后自动删除
您可以在这里管理您的 Codespace:https://github.com/codespaces
您可能需要在 30 分钟超时之前手动暂停它们
如果您有多个闲置的 Codespace 闲置数天,您可能很快就会耗尽存储配额。您应该删除那些您不打算再使用的,并且从长远来看可能只保留 1 或 2 个。还可以重新使用旧的代码空间并切换分支,而不是创建新的代码空间并删除旧的代码空间。
如果您不是 MetaMask 内部开发人员,或者以其他方式在分叉上进行开发,则默认的 Infura 密钥将位于免费计划中,并且每秒的请求非常有限。如果您想使用自己的 Infura 密钥,请按照在本地计算机上构建部分中的.metamaskrc
和INFURA_PROJECT_ID
说明进行操作。
安装 Node.js 版本 20
如果您正在使用 nvm(推荐),运行nvm use
将自动为您选择正确的节点版本。
通过在 metamask-extension 项目中执行命令corepack enable
来启用 Corepack。 Corepack 是 Node.js 默认包含的实用程序。它使用项目的 package.json 文件中的packageManager
属性指定的版本,按项目管理 Yarn。请注意,Yarn 的现代版本不适合全局安装或通过 npm 安装。
在根目录中复制.metamaskrc.dist
并通过运行cp .metamaskrc{.dist,}
将其重命名为.metamaskrc
。
如果您没有 Infura 帐户,您可以在 Infura 网站上免费创建一个帐户。
将INFURA_PROJECT_ID
值替换为您自己的个人 Infura API 密钥。
如果调试 MetaMetrics,您需要为SEGMENT_WRITE_KEY
段写入键添加值,请参阅在 MetaMask 上开发 - 段。
如果调试未处理的异常,您需要为SENTRY_DSN
Sentry Dsn 添加一个值,请参阅在 MetaMask - Sentry 上进行开发。
(可选)将PASSWORD
值替换为您的开发钱包密码,以避免每次打开应用程序时都输入该密码。
运行yarn install
来安装依赖项。
使用yarn dist
(对于基于Chromium的浏览器)或yarn dist:mv2
(对于Firefox)将项目构建到./dist/
文件夹
或者,要创建开发版本,您可以运行yarn start
(对于基于Chromium的浏览器)或yarn start:mv2
(对于Firefox)
未压缩的构建可以在/dist
中找到,压缩的构建一旦构建就可以在/builds
中找到。
有关构建系统使用信息,请参阅构建系统自述文件。
请按照以下说明验证您的本地构建是否正确运行:
如何将自定义构建添加到 Chrome
如何向 Firefox 添加自定义构建
要在提交代码之前从我们共享的代码质量健身功能中获得快速反馈,您可以使用 Husky 安装我们的 git hooks。
$ yarn githooks:install
您可以在我们的测试文档中阅读有关它们的更多信息。
如果您使用 VS Code 并且由于“未找到命令”错误而无法从源代码管理侧边栏进行提交,请尝试 Husky 文档中的这些步骤。
要启动开发构建(例如,使用日志记录和文件监视),请运行yarn start
。
您可以通过将TEST_SRP='
和PASSWORD='
添加到.metamaskrc
文件,以预加载的钱包状态开始开发构建。然后您有以下选择:
通过运行yarn start:with-state
,使用默认的固定标志启动钱包。
通过运行yarn start:with-state --help
检查可用的固定标志列表。
通过运行yarn start:with-state --FIXTURE_NAME=VALUE
使用自定义固定标志启动钱包,例如yarn start:with-state --withAccounts=100
。您可以传递任意数量的标志。其余灯具将采用默认值。
您还可以使用yarn webpack
命令或yarn webpack --watch
启动开发构建。这使用了更快的替代构建系统,但尚未准备好投入生产。有关更多信息,请参阅 Webpack 自述文件。
要启动React DevTools,请运行yarn devtools:react
并在浏览器中安装安装的开发版本。这将在一个单独的窗口中打开;不需要浏览器扩展。
启动 Redux DevTools 扩展:
全局安装remotedev-server
包(例如yarn global add remotedev-server
)
安装 Redux Devtools 扩展。
打开 Redux DevTools 扩展并选中 Remote DevTools 设置中的“使用自定义(本地)服务器”复选框,使用默认服务器配置(主机localhost
、端口8000
、安全连接复选框未选中)。
然后运行命令yarn devtools:redux
并在浏览器中安装开发版本。这将使您能够使用 Redux DevTools 扩展来检查 MetaMask。
要创建开发版本并同时运行这两个工具,请运行yarn start:dev
。
该测试站点可用于执行不同的用户流程。
运行单元测试和 linter with yarn test
。要仅运行单元测试,请运行yarn test:unit
。
您可以使用yarn lint
自行运行linter,并且可以使用yarn lint:fix
自动修复一些lint 问题。您还可以分别使用yarn lint:changed
和yarn lint:changed:fix
对本地更改运行这两个命令以节省时间。
有关使用 Node.js 的 Jest 调试指南,请参阅 docs/tests/jest.md。
我们的 e2e 测试套件可以在 Firefox 或 Chrome 上运行。以下是开始进行 e2e 测试的方法:
在运行 e2e 测试之前,请确保已运行yarn install
来下载依赖项。接下来,您需要一个测试构建。您有 3 个选择:
使用yarn download-builds:test
快速下载 Chrome 和 Firefox 的测试版本并将其解压到./dist/
文件夹中。该方法快速、方便,适合标准测试。
创建自定义测试构建:要针对不同构建类型进行测试,请使用yarn build:test
。此命令允许您生成各种类型的测试版本,包括:
yarn build:test
主构建
yarn build:test:flask
yarn build:test:mmi
用于 mmi 构建
yarn build:test:mv2
用于 mv2 构建
通过实时更改开始测试构建: yarn start:test
对于开发特别有用。它启动一个测试构建,根据更改自动重新编译应用程序代码。此选项非常适合迭代测试和开发。此命令还允许您生成各种类型的测试版本,包括:
yarn start:test
主构建
yarn start:test:flask
yarn start:test:mv2
用于 mv2 构建
注意: yarn start:test
命令(启动 testDev 构建类型)已为构建系统和应用程序禁用 LavaMoat,从而在开发过程中提供简化的测试体验。另一方面, yarn build:test
使 LavaMoat 能够增强构建系统和应用程序的安全性,更紧密地反映生产环境。
准备好测试构建后,请选择用于 e2e 测试的浏览器:
对于 Firefox,运行yarn test:e2e:firefox
。
注意:如果您在 Linux 上将 Firefox 作为快照包运行,请确保启用适当的环境变量: FIREFOX_SNAP=true yarn test:e2e:firefox
对于Chrome,运行yarn test:e2e:chrome
。
这些脚本支持额外的调试选项。使用--help
查看所有可用选项。
单个e2e测试可以使用yarn test:e2e:single test/e2e/tests/TEST_NAME.spec.js
以及以下选项来运行。
--browser 设置使用的浏览器;指定“chrome”、“firefox”、“all”或保留未设置以默认在“all”上运行。 [string] [default: 'all'] --debug 在调试模式下运行测试,记录每个驱动程序交互 [boolean] [default: true] --retries 设置失败时应重试测试的次数。 [number] [默认值:0] --leave-running 在测试失败后让浏览器保持运行,以及测试使用的其他任何内容(ganache、测试 dapp 等)[boolean] [默认值:false] -- update-snapshot 更新 E2E 测试快照 [别名:-u] [布尔值] [默认值:false]
例如,要使用 Chrome 运行account-details
测试,并设置调试日志记录并将浏览器设置为在失败时保持打开状态,您可以使用: yarn test:e2e:single test/e2e/tests/account-menu/account-details.spec.js --browser=chrome --leave-running
在开发新功能时,我们经常使用功能标志。当我们准备让这些功能普遍可用 (GA) 时,我们删除了功能标志。现有功能标志列在.metamaskrc.dist
文件中。要在启用特定功能标志的情况下执行 e2e 测试,必须首先生成激活该功能标志的测试版本。有两种方法可以实现此目的:
要在本地配置中启用功能标志,您应该首先确保有一个从.metamaskrc.dist
复制的.metamaskrc
文件。然后,在本地.metamaskrc
文件中,您可以将所需的功能标志设置为 true。接下来,可以通过执行yarn build:test
来创建启用了功能标志的测试构建。
或者,要在测试构建创建期间直接启用功能标志,您可以通过命令行将参数传递为 true。例如,可以通过运行MULTICHAIN=1 yarn build:test
或MULTICHAIN=1 yarn start:test
来激活 MULTICHAIN 功能标志。此方法允许快速调整功能标志,而无需更改.metamaskrc
文件。
创建启用所需功能标志的测试版本后,继续照常运行测试。您的测试现在将针对激活了特定功能标志的扩展版本运行。例如: yarn test:e2e:single test/e2e/tests/account-menu/account-details.spec.js --browser=chrome
这种方法可确保您的 e2e 测试准确反映即将推出的 GA 功能的用户体验。
不同的构建类型有不同的 e2e 测试集。为了运行它们,请查看package.json
文件。你会发现:
"test:e2e:chrome:mmi": "SELENIUM_BROWSER=chrome 节点 test/e2e/run-all.js --mmi", "test:e2e:chrome:snaps": "SELENIUM_BROWSER=chrome 节点 test/e2e/run- all.js --snaps", "test:e2e:firefox": "SELENIUM_BROWSER=firefox 节点 test/e2e/run-all.js",
在 MMI 构建上运行 e2e 时,您需要知道有 2 组独立的测试:
MMI 运行 MetaMask 的 e2e 测试的子集。为了实现这一点,我们将@no-mmi
标签附加到不适用于此构建类型的那些测试的名称中。
MMI 运行另一组特定的 e2e 遗留测试,此处有更好的记录
每当您更改依赖项(在package.json
或yarn.lock
中添加、删除或更新)时,都有各种文件必须保持最新。
yarn.lock
:
更改后再次运行yarn
,以确保yarn.lock
已正确更新。
运行yarn lint:lockfile:dedupe:fix
以从锁定文件中删除重复的依赖项。
package.json
中的allow-scripts
配置
运行yarn allow-scripts auto
以自动更新allow-scripts
配置。此配置确定是否允许运行包的安装/安装后脚本。检查每个新包以确定安装脚本是否需要运行,并在必要时进行测试。
不幸的是, yarn allow-scripts auto
在不同平台上的行为会不一致。 macOS 和 Windows 用户可能会看到与可选依赖项相关的无关更改。
LavaMoat 策略文件
LavaMoat 策略文件有两组:
每当您重新生成策略文件时,请检查更改以确定授予每个包的访问权限是否合适。
不幸的是, yarn lavamoat:auto
在不同平台上的行为不一致。 macOS 和 Windows 用户可能会看到与可选依赖项相关的无关更改。
如果即使在重新生成策略文件后仍然出现策略失败,请尝试在全新安装后重新生成策略,方法是:
请记住,任何类型的动态导入或动态使用全局变量都可能逃避 LavaMoat 的静态分析。如果遇到任何问题,请参阅 LavaMoat 文档或寻求帮助。
每当构建系统本身使用的依赖项发生变化时,就应该重新生成它。
只要 Web 应用程序的生产依赖项发生变化,就应该重新生成这些内容。
生产 LavaMoat 策略文件 ( lavamoat/browserify/*/policy.json
),使用yarn lavamoat:webapp:auto
重新生成。添加--help
以供使用。
构建系统 LavaMoat 策略文件 ( lavamoat/build-system/policy.json
),使用yarn lavamoat:build:auto
重新生成。
rm -rf node_modules/ && yarn && yarn lavamoat:auto
如果您是 MetaMask 团队成员并且您的 PR 位于存储库分支上,则可以使用机器人命令@metamaskbot update-policies
要求 MetaMask 机器人自动为您更新策略。
如果您的 PR 来自分叉,您可以要求 MetaMask 团队成员帮助更新策略文件。
手动更新说明: tl;dr是运行yarn lavamoat:auto
来更新这些文件,但细节可能有问题:
属性文件
如果您是 MetaMask 团队成员并且您的 PR 位于存储库分支上,则可以使用机器人命令@metamaskbot update-attributions
要求 MetaMask 机器人自动为您更新属性文件。
手动更新:运行yarn attributions:generate
。
截至 2022 年夏季的控制器层次结构和依赖关系的可视化。
整个代码库的视觉效果。
如何向 MetaMask 添加新翻译
出版指南
如何使用 TREZOR 模拟器
在 MetaMask 上开发
如何生成该存储库开发的可视化
如何添加新的确认
浏览器支持指南
使用 MetaMask Snap 扩展 MetaMask 的功能。
提示您的用户添加并切换到新网络。
更改您的 dapp 连接到 MetaMask 时出现的徽标。