解决问题

本节提供的信息可帮助您排除故障并解决或解决与以下任务相关的常见问题:

  • 下载并安装 {sdk-short-name}

  • 创建、构建或部署容器

  • 使用 dfx 命令行界面

  • 运行本地容器执行环境

确保节点在项目中可用

因为项目依赖 webpack 为默认前端提供框架,所以您必须在开发环境中安装 node.js 并且可以在项目目录中访问。

  • 如果您想在不使用默认 webpack 配置和容器别名的情况下开发项目,您可以从 dfx.json 文件中删除 assets 容器或使用特定容器名称构建项目。 例如,您可以通过运行以下命令选择仅构建没有前端资产的 hello 程序:

    dfx build hello
  • 如果你使用默认的 webpack 配置并且运行 dfx build 失败,你应该尝试在项目目录中运行 npm install 然后重新运行 dfx build

  • 如果在项目目录中运行 npm install 不能解决问题,您应该检查 webpack.config.js 文件的配置是否有语法错误。

迁移现有项目

目前,对于您可能使用先前版本的`dfx` 命令行界面创建的任何项目,都没有自动迁移或向后兼容性。 升级到最新版本后,如果您尝试构建或安装使用先前版本的 dfx 命令行界面创建的项目,则可能会看到错误或失败消息。

但是,在许多情况下,您可以通过手动更改 dfx.json 配置文件中的 dfx 设置来继续使用以前版本中的项目,然后重新构建项目以与 dfx 命令行的版本兼容您当前安装的界面。

例如,如果您有一个使用 dfx 版本 0.8.0 创建的项目,请在文本编辑器中打开 dfx.json 文件并将 dfx 设置更改为最新版本或完全删除该部分。

重启本地容器执行环境

在某些情况下,由于过时状态,启动本地容器执行环境会失败。 如果在运行 dfx start 启动本地容器执行环境时遇到问题:

通过运行以下命令停止本地容器执行环境:

+

dfx stop
  1. 通过运行以下命令以干净状态重新启动本地容器执行环境:

    dfx start --clean

    --clean 选项从项目缓存中删除检查点和陈旧状态信息,以便您可以在干净状态下重新启动本地容器执行环境和 Web 服务器进程。

但是请记住,如果您通过运行 dfx start --clean 来重置状态信息,您现有的容器也会被删除。

运行 dfx start --clean 后,通过运行以下命令重新创建您的容器:

dfx canister create --all
dfx build
dfx canister install --all

删除容器目录

如果您在成功连接到 Internet Computer 并注册容器标识符后在构建或部署容器时遇到问题,则应在尝试重新构建或重新部署容器之前删除 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 二进制文件的位置,您可能需要运行以下命令来卸载 PATH 中的 dfx 版本,然后重新安装最新版本的 dfx:

rm -rf ~/.cache/dfinity && rm $(which dfx) && sh -ci "$(curl -sSL https://sdk.dfinity.org/install.sh)"

Xcode 先决条件

在 macOS 计算机上创建新项目时,某些版本的 {sdk-short-name} 会提示您安装 Xcode。 提示已被删除,dfx new 命令不需要您安装任何 macOS 开发者工具。 但是,如果要为项目创建 Git 存储库,则应该安装 Developer Command Line Tools。

你可以通过运行`xcode-select -p来检查你是否安装了开发者工具。 你可以通过运行xcode-select --install`来安装开发者工具。

使用虚拟机时构建失败

如果您在 Ubuntu 或 CentOS 上使用虚拟机映像运行 dfx,则在尝试运行 dfx build 命令时可能会看到如下所示的错误消息:

Building hello...
An error occurred:
Io(
    Os {
        code: 2,
        kind: NotFound,
        message: "No such file or directory",
    },
)

地址在使用错误或孤立进程

如果您在本地开发项目,您通常会在单独的终端或后台运行本地容器执行环境。 如果本地环境进程未正确终止,您可能会看到操作系统错误,表明地址已在使用中,或者无法使用 dfx stop 命令正常停止进程。

在多种情况下,您可能会遇到此问题。 例如,如果您在本地项目目录中运行 dfx start,然后在没有先停止容器执行环境进程的情况下切换到不同的本地项目目录,您可能会看到此问题。

如果遇到您怀疑的问题或收到地址已在使用中或进程已在后台运行的消息,请执行以下步骤:

  1. 如果您使用默认绑定到 localhost,请运行以下命令以查看哪个进程正在侦听 8000 端口:

    lsof -i tcp:8000
  2. 运行以下命令以终止任何孤立进程:

    killall dfx replica
  3. 关闭当前终端并打开一个新的终端窗口。

  4. 在新终端中,运行以下命令,以干净状态运行本地容器执行环境:

    dfx start --clean --background

内存泄漏

修复内存泄漏是一个持续的过程。 如果您遇到任何与内存泄漏相关的错误消息,您应该执行以下操作:

  1. 运行 dfx stop 以停止当前正在运行的进程。

  2. 卸载 dfx 以防止进一步退化。

  3. 重新安装`dfx`

  4. 运行 dfx start 重新启动副本进程。

或者,您可以删除 .cache/dfinity 目录并重新安装最新的 dfx 二进制文件。 例如:

rm -rf ~/.cache/dfinity && sh -ci "$(curl -sSL https://sdk.dfinity.org/install.sh)"