# Hello Bucky!
这个系列教程的目的是用最短的时间让您能快速体验Bucky框架，并对一些基础概念有一些感性的理解。让我们开始吧！第一篇文章我们会完成环境的搭建，并把一个最简单的用户登陆/注册的服务运行起来。

### 准备开发环境
安装最新版本的nodejs 8.9.1 LTS，以及npm工具
在各个操作系统上安装nodejs请参考 https://nodejs.org/en/
* windows: 下载https://nodejs.org/en/ LTS版
* mac: 下载https://nodejs.org/en/ LTS版 或者 brew install nodejs@8.9.1

### 安装buckyos sdk
```
npm install -g buckyos
```

### 得到一个有效的bucky appid
在[www.buckycloud.com](www.buckycloud.com)登陆bucky账号，然后进入控制面板。
在应用控制面板左侧点击`添加应用`，填写应用的友好名称为Demo.
应用创建成功后在左侧点击应用名，会进入应用的控制面板。可以看到应用的各种信息和统计数据，这里我们只要看一下appid就好了。

### 建立代码目录
```
cd {{你喜欢的目录}}
mkdir demo
```

### 安装Demo代码
```
cd demo
bucky init -i
```
bucky init -i是使用交互式命令行来创建一个bucky解决方案。我们的选项如下

```
解决方案类型：
────────────────────
1. 示例
2. 新建解决方案

$请选择解决方案类型[1/2]：
```

选择1. 创建示例解决方案
然后在示例列表里

```
示例项目列表：
────────────────────
1. HelloBucky
2. minichat
3. mysql

$选择示例项目序号：

```
继续选择1，创建HelloBucky.

自此，初始化成功。

### 发布代码准备运行
输入命令
```
bucky build
bucky deploy
```

运行该命令会要求使用开发者账号登录并给项目设置一个有效的appid。
根据提示输入用户名密码:
```
$请输入用户名：example-user

$请输入密码：*****
```

验证成功后会自动拉取可用的appid列表（appid则需要在[www.buckycloud.com](www.buckycloud.com)网站后台预先创建），选择一个输入即可：
```
--------------------------------
all appids for user:example-user
--------------------------------
1: appname: Demo , appid: 4w9aAOd3MX
2: appname: example2 , appid: mxkazUeJ0D
--------------------------------


$请选择app序号：
```

紧接着就会开始执行完整的构建过程，`build`实际上是一个复合命令，不带参数-e可以看到该命令实际执行的是下面命令的序列
```
bucky compile
bucky proxy
bukcy stop
bucky pub
bucky start
```

完成了`代码编译`，`生成代理包`，`停止应用服务`，`上传代码`，`运行服务`的一整套操作。熟练后可以根据实际需要单独调用子命令。

### 重置Knowledge

每个bucky应用程序有一个全局配置，称之为`Knowledge`。Knowledge的本地配置默认放在根目录下的knowledge.json。到了这里我们还没有完成运行前的准备工作，我们还需要更新一次应用程序的Knowldege。由于这个操作涉及到应用程序的全局配置的更新，我们提供了单独的命令来操作：
```
bucky k -reset
```

事实上，用户并不需要在每次`build`之后都重置`Knowldege`，只有在应用程序的`Knowldege`配置（默认在根目录下的knolwdeg.json）更新之后，需要重置。

设置knwoledge成功后就已经做好了运行服务的全部准备工作

### 测试服务

#### 代码简介
这个小demo实现了一个非常简单的账号管理服务，在./src/account/account.js里提供两个接口:
1. signup会在系统里创建一个账号
    - 如果用户名没有被使用，则返回成功
    - 如果用户名已经被使用过就会返回用户已存在
2. signin会进行一次账号的登陆验证，如果用户名和密码输入正确就会成功。

根据上述接口定义，在./test/account/test_account.js中包含了一个简单的单元测试：
1. 先注册，然后再用同样信息注册会返回用户已存在;
2. 用正确的用户密码登陆成功。


#### 执行测试
对服务进行正常的测试命令也很简单：
```
bucky run -main ./test/account/test_account.js
```

测试通过就表示服务已经正常的运行起来了，是不是非常的简单～。
bucky工具默认情况下把测试代码的日志级别设置为了error, 所以输出比较简洁，如果想查看更多日志可以通过
`-blog_level level`来设置，例如：

```
bucky run -main ./test/account/test_account.js -blog_level info
```

将会打开测试代码的info级别日志，则可以看到许多bucky运行时在本地执行的日志信息。


### 进行本地调试

在把代码发布到正式环境之前，我们当然需要进行开发测试。
bucky框架支持全本地调试模式，可以非常方便的使用喜欢的js debug来调试业务逻辑。

#### 预先准备：
1. 如果使用了mysql，则需要本地安装mysql。
2. 如果使用了mongodb，则需要本地安装mongodb。
3. 如果使用了redis，则需要本地安装redis，并启动。
4. 使用`bucky config -localdebug`配置对应的用户名、密码。

#### 本地调试：
```
bucky debug -main ./test/account/test_account.js
```

调试命令和运行命令的差别很小，但跑起来的时候并不需要和[buckycloud](buckycloud.com)的云服务进行任何通信，一切都是在本地完成的。

如果想使用Visual Studio Code调试器来调试，可以通过`-vscode`选项获得准备好的配置信息：
```
bucky debug -main ./test/account/test_account.js -vscode
```

该命令会显示Visual Studio Code的调试配置，类似下面
```
{
    "type": "node",
    "request": "launch",
    "name": "local-debug",
    "program": "/usr/local/lib/node_modules/buckyos/tools/node_loader.js",
    "args": [
        "/usr/local/lib/node_modules/buckyos/tools/node_loader.js",
        "-main",
        "/Users/admin/tmp/test/account/test_account.js",
        "-app",
        "/Users/admin/tmp/dist/bucky/bucky_meta.json",
        "-packages_dir",
        "/Users/admin/tmp/dist/bucky",
        "-local_debug",
        "/Users/admin/tmp/dist/bucky/knowledges.json"
    ],
    "cwd": "/Users/admin/tmp/test"
}
```

即使您不习惯使用vscode,也可以通过阅读这个配置，去配置你喜欢的调试器。

### 总结
通过学习第一个教程，我们对使用bucky框架进行开发的全流程都有了一个基本的体验，下一章我们会对demo里的代码进行分析，进一步的了解如何使用bucky框架。