工程目录结构
通过bucky命令行工具创建工程目录,可以比较清晰的组织工程的目录结构。例如通过下面的步骤,可以创建一个清晰的服务端、前端工程目录结构。
mkdir testcd testbucky init -i进入交互式初始化模式- 创建项目,输入项目相对路径:
src/server,项目类型选择Bucky项目的序号- 并分别创建名为
account和setting两个新的新建package - 继续创建一个名为
common的静态库 - 选择不继续创建包
- 并分别创建名为
- 继续创建项目,输入项目相对路径:
src/client/react_native_ui,项目类型选择ReactNative(前端)的序号 - 继续创建项目,输入项目相对路径:
src/client/html,项目类型选择HTML5(前端)的序号 - 继续创建项目,输入项目相对路径:
src/client/node_cli,项目类型选择Node(命令行程序)的序号 - 选择不继续创建项目
- 完成
此时,目录结构如下(显示了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 Packageconfig.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目录,这几个目录是在每次创建一个新的buckyXAR Package的时候,自动创建的对应包的测试目录
在对应包的对应测试目录下编写测试代码是bucky推荐的做法。例如通过本地调试可以快速排错:
- 在
test/account目录下添加test/account/test_account.js - 本地调试:
bucky debug -main test/account/test_account.js
前端项目目录结构
src/client/react_native_ui,是新创建的react-native前端项目代码,其中src/client/react_native_ui/core目录下会在bucky编译的时候,自动同步下面三个文件:rn_core.jsrn_ld_core.jsbucky_meta.js- 上述三个文件都是在
src/client/react_native_ui/App.js里面使用bucky必须的。
src/client/html5,是新创建的html5前端项目代码,其中src/client/html5/core目录下会在bucky编译的时候,自动同步下面三个文件:h5_core.jsh5_ld_core.jsbucky_meta.js- 上述三个文件都是在
src/client/html5/main.js里面使用bucky必须的。
src/client/node_cli,是新创建的node命令行程序,其中src/client/node_cli/core目录下会在bucky编译的时候,自动同步下面三个文件:node_core.jsnode_ld_core.jsbucky_meta.js- 上述三个文件都是在
src/client/node_cli/main.js里面使用bucky必须的。
可以看到,前端项目的目录下通常都有一个core目录,bucky会在执行bucky build的过程中,自动同步这些文件。
其中bucky build实际包含了下面2个个动作:
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的相对路径。
- 编译Bucky类型项目下的
bucky proxy: 代理生成步骤,执行的动作如下:- 为
dist/bucky/下的XAR Package生成代理包 - 计算
dist/bucky/下所有XAR Package(包含代理包)的带哈希版本集信息,生成dist/bucky/version_set.json - 版本集的设置,为开发者做灰度测试提供了便利,可参考版本集相关的文档
- 为
其中bucky deploy实际包含了如下3个部署动作
bucky pub:把XAR Package发布到bucky的包仓库上(bucky repository)上bucky stop: 在bucky cloud上停止该app,该步骤可能会耗时,取决于app正在运行中的云端runtime的数量bucky start:在bucky cloud上启动该app
小结
到此,可以清晰的看到使用bucky 命令行工具创建工程目录,具有solution、project两层清晰的结构,而knowledges.json则作为全局配置存在。
并且,project里又分为Bucky项目、react-native前端项目、html5前端项目、node命令行程序等。客户端项目和bucky之间通过这些项目的core目录下的bucky类库连接在一起。
单独说明的是Bucky项目,包含了XAR Pacakage子结构,用来模块化在bucky cloud上被自动调度的代码包,同时它们的输出目录默认位于dist/bucky下。
通过理解bucky的工程目录结构,开发者可以更清晰的组织、管理项目。