Dfinity开发问题及解决方案
本节提供的信息可帮助您对与以下任务相关的常见问题进行故障排除和解决或变通:
- 下载并安装 DFINITY Canister SDK
- 创建、构建或部署容器
- 使用
dfx
命令行界面 - 在开发环境中本地运行 Internet 计算机网络
确保节点在项目中可用
因为项目依赖webpack为默认前端提供框架,所以你必须已经node.js
安装在你的开发环境中并且可以在项目目录中访问。
-
如果您想在不使用默认 webpack 配置和容器别名的情况下开发您的项目,您可以
assets
从dfx.json
文件中删除容器或使用特定容器名称构建您的项目。例如,您可以通过运行以下命令来选择仅构建 hello 程序,而无需前端资产:dfx build hello
-
如果你使用默认的 webpack 配置并且运行
dfx build
失败,你应该尝试npm install
在项目目录中运行然后重新运行dfx build
. -
如果
npm install
在项目目录中运行不能解决问题,您应该检查webpack.config.js
文件的配置是否存在语法错误
迁移现有项目
目前,您可能使用以前版本的dfx
命令行界面创建的任何项目都没有自动迁移或向后兼容性。升级到最新版本后,如果您尝试构建或安装使用先前版本的dfx
命令行界面创建的项目,您可能会看到错误或失败消息。
但是,在许多情况下,您可以通过手动更改 dfx.json 配置文件中的 dfx 设置,然后重新构建项目以与dfx
您当前拥有的命令行界面版本兼容,从而继续使用先前版本中的项目安装。
例如,如果您有一个使用dfx
version创建的项目,请在文本编辑器中0.4.9
打开该dfx.json
文件并将dfx
设置更改为最新版本或完全删除该部分。
重新启动本地Internet计算机网络
在某些情况下,由于复制状态错误,在本地启动 Internet 计算机网络会失败。如果在运行dfx start
启动本地 Internet 计算机网络时遇到问题:
-
在显示网络操作的终端中,按 Control-C 可中断本地网络进程。
-
通过运行以下命令停止 Internet 计算机网络:
dfx stop
-
通过运行以下命令,以干净的状态重新启动 Internet 计算机:
dfx start --clean
该
--clean
选项会从您的项目缓存中删除检查点和陈旧状态信息,以便您可以在干净的状态下重新启动 Internet 计算机副本和 Web 服务器进程。
但是请记住,如果您通过运行重置状态信息dfx start --clean
,您现有的容器也会被删除。
运行后dfx start --clean
,通过运行以下命令重新创建您的容器:
dfx canister create --all
dfx build
dfx canister install --all
删除容易目录
如果您在成功连接到 Internet 计算机并注册容器标识符后在构建或部署容器时遇到问题,您应该canisters
在尝试重建或重新部署容器之前删除该目录。
您可以canisters
通过在项目的根目录中运行以下命令来删除项目的目录:
rm -rf ./.dfx/* canisters/*
重新安装dfx
您可能遇到的许多错误都可以通过卸载并重新安装dfx
命令行界面来解决。这里有几种重新安装的方法dfx
。
如果您dfx
的开发环境中只安装了一个版本,通常可以运行以下命令卸载并重新安装最新版本的dfx
:
~/.cache/dfinity/uninstall.sh && sh -ci "$(curl -sSL https://sdk.dfinity.org/install.sh)"
如果您修改了dfx
二进制文件的位置,您可能需要运行以下命令来卸载dfx
PATH 中的版本,然后重新安装最新版本dfx
:
rm -rf ~/.cache/dfinity && rm $(which dfx) && sh -ci "$(curl -sSL https://sdk.dfinity.org/install.sh)"
Xcode先决条件
在 macOS 计算机上创建新项目时,某些版本的 DFINITY Canister SDK 会提示您安装 Xcode。该提示已被删除,该dfx new
命令不需要您安装任何 macOS 开发人员工具。但是,如果要为项目创建 Git 存储库,则应该安装 Developer Command Line Tools。
您可以通过运行来检查是否安装了开发人员工具xcode-select -p
。您可以通过运行安装开发人员工具xcode-select --install
。
使用VM时构建失败
如果您dfx
在 Ubuntu 或 CentOS上使用虚拟机映像运行,当您尝试运行dfx build
命令时,您可能会看到如下所示的错误消息:
Building hello...
An error occurred:
Io(
Os {
code: 2,
kind: NotFound,
message: "No such file or directory",
},
)
地址使用错误或孤立进程
如果您在本地开发项目,您通常会有一个本地版本的核心 Internet 计算机进程——统称为——在replica
单独的终端或后台运行。如果正在运行的 Internet 计算机进程未正确终止,您可能会看到操作系统错误,表明地址已在使用中,或者无法使用该dfx stop
命令正常停止进程。
在多种情况下您可能会遇到此问题。例如,如果您dfx start
在本地项目目录中运行,然后在没有先停止 Internet 计算机进程的情况下更改到不同的本地项目目录,您可能会看到此问题。
如果您遇到怀疑地址已被使用或进程已在后台运行的消息的问题,请执行以下步骤:
-
如果您使用默认的本地网络绑定,请运行以下命令以查看哪个进程正在侦听 8000 端口:
lsof -i tcp:8000
-
运行以下命令以终止任何孤立进程:
killall dfx replica
-
关闭当前终端并打开一个新的终端窗口。
-
在新的终端中,运行以下命令,以干净的状态运行本地互联网计算机:
dfx start --clean --background
内存泄漏
修复内存泄漏是一个持续的过程。如果您遇到任何与内存泄漏相关的错误消息,您应该执行以下操作:
- 运行
dfx stop
以停止当前正在运行的进程。 - 卸载
dfx
以防止进一步降级。 - 重新安装
dfx
- 运行
dfx start
以重新启动副本进程。
或者,您可以删除该.cache/dfinity
目录并重新安装最新的dfx
二进制文件。例如:
rm -rf ~/.cache/dfinity && sh -ci "$(curl -sSL https://sdk.dfinity.org/install.sh)"
- https://sdk.dfinity.org/docs/developers-guide/cli-reference/dfx-wallet.html)