# 1.本地开发

这个快速启动方案是您首次安装DFINITY及其软件开发包SDK，并运行IC作为本地开发环境的一部分。

在一开始，让我们构建并部署一个简单的Hello应用程序，它只有一个叫做greet的功能。如果使用命令行运行应用程序或在浏览器中访问应用程序弹出窗口，greet功能将接受一个文本参数并在一个终端中返回类似于“Hello，everyone！”消息。

**准备工作**

在下载并安装此版本的DFINITY以及软件开发工具包 SDK之前，请验证以下内容：

* 已连接互联网，并可以通过macOS 或者 Linux访问本地的 shell 终端。

目前，DFINITY及SDK包只可在macOS 或者 Linux系统中运行。

* 如果想在项目前端开发中使用 SDK 的模板文件，请安装 node.js。

如果您不确定如何在本地计算机上打开新的终端或如何安装节点node.js,，请参阅[新手上路](https://sdk.dfinity.org/docs/quickstart/newcomers.html)。如果您能够满足上述条件，请继续[下载和安装](https://sdk.dfinity.org/docs/quickstart/local-quickstart.html#download-and-install)。

**下载和安装**

你可以直接从本地计算机终端下载最新版本的DFINITY 和软件开发工具包（SDK）。

下载和安装：

1. 打开本地 shell 终端

打开“应用程序”、“实用程序”，然后双击“Terminal ”或按 ⌘+spacebar 打开搜索栏后进入终端。

1. 通过运行以下命令下载并安装 SDK 包：

**`sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"`**

此命令将提示您在安装DFINITY执行命令行(CLI)及本地计算机的依赖项之前，先阅读并接受许可协议。

1. 输入 “y” 并按回车键继续安装。

该命令将显示在本地计算机上正在安装的组件信息。

**验证 SDK**

如果您在安装运行脚本时没有任何错误，则您启动的在计算机互联网平台上运行的程序都可以在本地计算机上使用。

验证 SDK：

1. 打开本地 shell 终端
2. 检查是否安装了 DFINITY 命令行界面，以及dfx文件是否在路径中可用：

```
dfx --version
```

该命令会显示版本信息，如下所示：

**`dfx 0.6.26`**

1. 通过运行以下命令， 预览dfx的子命令的信息：

```
dfx --help
```

该命令将显示dfx父命令及其子命令的使用信息。

**安装 Motoko 语言编辑器插件**

如果计划使用 Motoko 语言并以 Visual Studio Code 为编辑器写程序，则可以安装 VSCode 的 Motoko 语言插件，它提供了语法高亮显示、类型信息和自动补全等功能。

安装插件：

1. 下载并安装 [Visual Studio Code](https://code.visualstudio.com/download)。
2. 单击“View”，然后选择“Extensions”。
3. 搜索 “motoko”。
4. 选择 DFINITY Foundation 发布的 Motoko 语言插件，然后选择“Install”。
5. 下载并安装 [Visual Studio Code](https://code.visualstudio.com/download)。
6. 单击“View”，然后选择“Extensions”。
7. 搜索 “motoko”。
8. 选择 DFINITY Foundation 发布的 Motoko 语言插件，然后选择“Install”。

如果您的程序有依赖项，您可以安装 Motoko 的软件包管理器，有关说明请参阅 [ReadMe](https://github.com/kritzcreek/vessel)。如果您想下载最新的发布，请参阅[vessel](https://github.com/kritzcreek/vessel/releases) Github 存储库。

**创建新项目**

我们认为IC的应用程序是projects。您可以使用dfx父命令及其子命令来创建projects。使用dfx创建新项目会将默认的项目目录结构添加到您的开发工作区。

为您的第一个应用程序创建一个新项目：

1. 打开本地 shell 终端；
2. 通过运行以下命令来创建一个名为hello的新项目：

```
dfx new hello
```

dfx new hello命令创建了一个 新的hello项目，其中包含默认项目目录、一些模板文件和项目的 Git 存储库。

如果您使用的是不同的项目名称而不是hello，请记下您使用的名称。您需要在这些说明中使用新的项目名称而不是hello。

1. 通过运行以下命令更改项目目录：

```
cd hello
```

**启动本地IC网络**

在构建第一个项目之前，您需要连接到IC网络，这个网络可以是在你本地开发环境中运行的，也可以是在你能访问到的子网络上远程运行的。

这些说明的前提是您正在运行本地Internet网络。如果要连接到外部Internet计算机网络，则可以跳过此部分。作为最佳做法，此步骤需要打开两个终端，以便可以在一个终端中启动并查看网络操作，并在另一个终端中管理项目。

启动本地网络：

1. 在本地计算机上打开新的第二个终端窗口或选项卡。
2. 如果有必要，请导航至项目的根目录。

现在应该保持两个终端呈打开状态，并将项目目录作为两个终端的当前工作目录。

1. 通过运行以下命令，在本地计算机上的第二个终端启动IC网络：

```
dfx start
```

如果系统提示您选择“允许或拒绝传入的网络连接”，请单击“允许”。启动本地网络后，会看到IC副本启动的消息以及当前网络配置的详细信息。

1. 将显示网络操作的终端窗口打开，并切换到创建新项目的第一个终端窗口。

您可以在终端中执行不显示网络操作的其余步骤。

**注册、构建和部署该应用程序**

当在开发环境中连接至本地运行的IC网络后，您可以在本地注册、构建和部署应用程序。

在本地部署第一个应用程序：

1. 如有必要，请检查您是否仍在项目的根目录中。
2. 如有必要，请通过运行以下命令确保节点模块在项目目录中可用：

```
npm install
```

有关此步骤的详细信息，请参阅确保项目节点可用。

1. 通过运行以下命令来注册、构建和部署第一个应用程序：

```
dfx deploy
```

输出 dfx deploy命令将显示执行操作的信息。例如，此步骤会注册两个网络特定标识符（一个用于hello主程序，一个用于hello\_assets前端用户界面）以及类似以下内容的安装信息：

```
Creating the "default" identity.
  - generating new key at /Users/pubs/.config/dfx/identity/default/identity.pem
Created the "default" identity.
Deploying all canisters.
Creating canisters...
Creating canister "hello"...
Creating the canister using the wallet canister...
Creating a wallet canister on the local network.
The wallet canister on the "local" network for user "default" is "rwlgt-iiaaa-aaaaa-aaaaa-cai"
"hello" canister created with canister id: "rrkah-fqaaa-aaaaa-aaaaq-cai"
Creating canister "hello_assets"...
Creating the canister using the wallet canister...
"hello_assets" canister created with canister id: "ryjl3-tyaaa-aaaaa-aaaba-cai"
Building canisters...
Building frontend...
Installing canisters...
Installing code for canister hello, with canister_id rrkah-fqaaa-aaaaa-aaaaq-cai
Installing code for canister hello_assets, with canister_id ryjl3-tyaaa-aaaaa-aaaba-cai
Authorizing our identity (default) to the asset canister...
Uploading assets to asset canister...
Deployed canisters.
```

但是，如果您创建了一个不同名称的项目，那么您的容器名称将与您的项目名称相匹配，而不是与hello ，hello\_assets匹配。还应注意，第一次部署时，dfx将创建默认身份和由默认身份控制的本地钱包。电子钱包将使您能够将[cycles](https://sdk.dfinity.org/docs/developers-guide/concepts/tokens-cycles.html) 转移到其他容器。

1. 通过运行以下命令调用hello容器和预定义greet功能：

```
dfx canister call hello greet everyone
```

本示例使用dfx canister call将 "everyone" ”作为参数传递给 greet功能。

但请记住，如果创建了不同名称的项目，canister名称将与新的项目名称匹配，您需要修改命令行以匹配您使用的名称而不是hello。

1. 验证命令并显示greet功能的返回值。

例如：

**`("Hello, everyone!")`**

**测试应用程序的前端信息**

既然您已部署应用程序并使用命令行测试了其操作，那么让我们验证是否可以使用网络浏览器访问前端弹出窗口。

1. 打开浏览器
2. 导航到默认地址和端口号127.0.0.1：8000，然后向URL中添加/?canisterId=标识符和hello\_assets标识符。

完整的URL应该如下：

```
http://127.0.0.1:8000/?canisterId=rrkah-fqaaa-aaaaa-aaaaq-cai
```

导航到此URL时，将显示弹出窗口。例如：

![](https://285918876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mcxq3-JPmgwVgMiEdZR%2Fsync%2Fef8308e4fc22592964ed7daa902c0e65b8a3f81c.png?generation=1624535313152397\&alt=media)

1. 键入“greeting”函数，然后单击“OK”以返回该函数。

例如：

![](https://285918876-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mcxq3-JPmgwVgMiEdZR%2Fsync%2F8d5939174a7c7bb1af96ae51147e89df4059603c.png?generation=1624535313174253\&alt=media)

1. 单击“OK”以关闭弹出窗口。

停止本地网络

在浏览器中测试该应用程序后，您可以停止本地IC网络，使其不在后台运行。

停止本地网络：

1. 在显示网络操作的终端中，按 Control-C 键以中断本地网络进程。
2. 通过运行以下命令，停止在本地计算机上运行的Internet网络：

```
dfx stop
```

**接下来的步骤**

这个快速入门教程只涉及几个关键步骤用来介绍您开发自己的项目时所遵循的基本工作流程。在[教学指引](https://sdk.dfinity.org/docs/developers-guide/tutorials-intro.html) 和 [Motoko编程语言导引](https://sdk.dfinity.org/docs/language-guide/motoko.html)中，有更多详细的示例和教程供您探索。

如有问题请及时[联系我们](mailto:support@dfinity.org?subject=Quickstart)。

想加入这个社区吗？请访问我们的[社区论坛](https://forum.dfinity.org/)。

想继续了解新功能和更新的信息吗？请通过 [开发者更新](https://dfinity.org/newsletter)进行注册。
