工程目录结构

通过bucky命令行工具创建工程目录,可以比较清晰的组织工程的目录结构。例如通过下面的步骤,可以创建一个清晰的服务端、前端工程目录结构。

  1. mkdir test
  2. cd test
  3. bucky init -i 进入交互式初始化模式
  4. 创建项目,输入项目相对路径:src/server,项目类型选择Bucky项目的序号
    • 并分别创建名为accountsetting两个新的新建package
    • 继续创建一个名为common静态库
    • 选择不继续创建包
  5. 继续创建项目,输入项目相对路径:src/client/react_native_ui,项目类型选择ReactNative(前端)的序号
  6. 继续创建项目,输入项目相对路径:src/client/html,项目类型选择HTML5(前端)的序号
  7. 继续创建项目,输入项目相对路径:src/client/node_cli,项目类型选择Node(命令行程序)的序号
  8. 选择不继续创建项目
  9. 完成

此时,目录结构如下(显示了4层):

.
├── dist
│   ├── bucky
│   ├── h5
│   └── wx
├── knowledges.json
├── solution.json
├── src
│   ├── client
│   │   ├── html5
│   │   │   ├── core
│   │   │   ├── css
│   │   │   ├── img
│   │   │   ├── index.html
│   │   │   └── main.js
│   │   ├── node_cli
│   │   │   ├── core
│   │   │   └── main.js
│   │   └── react_native_ui
│   │       ├── App.js
│   │       ├── android
│   │       ├── app.json
│   │       ├── core
│   │       ├── index.js
│   │       ├── ios
│   │       ├── node_modules
│   │       ├── package-lock.json
│   │       ├── package.json
│   │       ├── shim.js
│   │       └── yarn.lock
│   └── server
│       ├── account
│       │   ├── account.js
│       │   ├── config.json
│       │   └── onload.js
│       ├── common
│       │   ├── common.js
│       │   ├── config.lib.json
│       │   └── onload.js
│       └── setting
│           ├── config.json
│           ├── onload.js
│           └── setting.js
└── test
    ├── account
    ├── common
    └── setting

可以看到,工程目录结构下主要包含如下几个关键要素:

解决方案配置文件

  • solution.json 表示整个解决方案,该文件里包含了对目录下所有子project的配置信息,以及bucky相关的重要配置。用户日常会修改的有:
    • solution.json里面的meta/locale字段,用来配置代码会在bucky的哪个集群上运行,目前有china,us两个可选集群。

全局配置文件

  • knowledges.json 里面主要是App的全局Konwledges配置,主要在使用MySQL,MongoDB,OSS存储,系统事件的时候需要进行对应的配置

bucky项目目录结构

  • src/server,是刚刚创建的Bucky项目,里面包含了一个一个XAR Package,每个XAR Package下含有:
    • config.json,代表这是一个XAR Package
    • config.lib.json,代表这是一个公用的静态库,其他XAR Package里可以直接使用相对路径require静态库里面的js模块,这对编写多个XAR Package的公共类库是十分有用的。
    • 注意Bucky项目下,一个包要么是XAR Package,要么是静态库,不可以混淆。
    • onload.js,是一个XAR Package加载时会被执行的受限代码
    • 其他js文件,代表XAR Package内的模块,模块的导出配置在config.json/modules字段下。
  • 注意到与solution.json同级还有一个test/xxx目录,这几个目录是在每次创建一个新的bucky XAR Package的时候,自动创建的对应包的测试目录

在对应包的对应测试目录下编写测试代码是bucky推荐的做法。例如通过本地调试可以快速排错:

  1. test/account目录下添加test/account/test_account.js
  2. 本地调试:bucky debug -main test/account/test_account.js

前端项目目录结构

  • src/client/react_native_ui,是新创建的react-native前端项目代码,其中src/client/react_native_ui/core目录下会在bucky编译的时候,自动同步下面三个文件:
    • rn_core.js
    • rn_ld_core.js
    • bucky_meta.js
    • 上述三个文件都是在src/client/react_native_ui/App.js里面使用bucky必须的。
  • src/client/html5,是新创建的html5前端项目代码,其中src/client/html5/core目录下会在bucky编译的时候,自动同步下面三个文件:
    • h5_core.js
    • h5_ld_core.js
    • bucky_meta.js
    • 上述三个文件都是在src/client/html5/main.js里面使用bucky必须的。
  • src/client/node_cli,是新创建的node命令行程序,其中src/client/node_cli/core目录下会在bucky编译的时候,自动同步下面三个文件:
    • node_core.js
    • node_ld_core.js
    • bucky_meta.js
    • 上述三个文件都是在src/client/node_cli/main.js里面使用bucky必须的。

可以看到,前端项目的目录下通常都有一个core目录,bucky会在执行bucky build的过程中,自动同步这些文件。由于bucky build实际包含了下面5个个动作:

  1. bucky compile: 编译解决方案,执行的动作如下:
    • 编译Bucky类型项目下的XAR Package,输出目录是dist/bucky/
    • 编译konwledges.json, 生成dist/bucky/knowledges.json
    • 生成bucky_meta.json,生成dist/bucky/bucky_meta.json
    • 同步不同前端项目的core目录,开发者可以在solution.json里对应project配置里修改core_dir的相对路径。
  2. bucky proxy: 代理生成步骤,执行的动作如下:
    • dist/bucky/下的XAR Package生成代理包
    • 计算dist/bucky/下所有XAR Package(包含代理包)的带哈希版本集信息,生成dist/bucky/version_set.json
    • 版本集的设置,为开发者做灰度测试提供了便利,可参考版本集相关的文档
  3. bucky pub:把XAR Package发布到bucky的包仓库上(bucky repository)上
  4. bucky stop: 在bucky cloud上停止该app,该步骤可能会耗时,取决于app正在运行中的云端runtime的数量
  5. bucky start:在bucky cloud上启动该app

了解了bucky build所做的动作,那么如果只是想做编译生成代理,可以执行bucky build -local,此时只会执行下面两个本地步骤:

  • bucky compile
  • bucky proxy

小结

到此,可以清晰的看到使用bucky 命令行工具创建工程目录,具有solutionproject两层清晰的结构,而knowledges.json则作为全局配置存在。

并且,project里又分为Bucky项目react-native前端项目html5前端项目node命令行程序等。客户端项目和bucky之间通过这些项目的core目录下的bucky类库连接在一起。

单独说明的是Bucky项目,包含了XAR Pacakage子结构,用来模块化在bucky cloud上被自动调度的代码包,同时它们的输出目录默认位于dist/bucky下。

通过理解bucky的工程目录结构,开发者可以更清晰的组织、管理项目。

results matching ""

    No results matching ""