erlang 游戏开发基础之四 开发工作流

614 阅读3分钟

工作流就是根据经验总结出来的研发的一种模式,新开项目有哪些步骤,每一步要干些什么,模式化,流程化是效率的关键。 -- 凯撒的归凯撒,上帝的归上帝,剩下好玩的。。。

官网参考

rebar3 新建项目

指令 # rebar3 new TYPE PRJ_NAME

TYPE 类型有下列五种

  1. app 有状态的OTP应用,有监控树,可以单独起服务。
  2. lib 无状态的OTP应用,无监控树,用作工具库。
  3. release 可作为应用发布的项目,会打包所有的依赖进去,做成发布包。
  4. escript 作为可执行脚本发布,相比直接写脚本,好处是可以方便各种依赖管理,也更模块化。
  5. plugin rebar3 插件

import 项目到 idea Module

以模块的方式导入

File->Project Structure ->Modules->点+号->Import module

模块一般设置

  1. Sources

    .rebar3, _build, _checkout, log, 等不需要关注的目录标成 Excluded。

    include, erlang头文件目录 标成 Includes。

    src, 代码源目录标成 Sources。

    test, 测试目录标成 Tests。

    搜索去除beam文件, Exclude files:*.beam。

  2. Paths 不需要理,一般不会使用这个目录,默认就好

  3. Dependencies

    添加本地idea模块的依赖,方便模块代码的点击跳转和识别。这样的话,在代码里面依赖了这个项目模块的话,Ctrl+点击就可以跳转到相应的项目和模块。

添加插件依赖

  1. 本地依赖

     把插件包下载到 _checkouts目录下(没有则自己创建,名字一样就可以了)
     rebar.config 声明插件依赖 {plugins, [rebar3_gpb_plugin, "2.22.5"]}
    
  2. git 依赖

     rebar.config 直接声明插件依赖 
     {plugins,[ {rebar3_gpb_plugin, {git, "https://github.com/lrascao/rebar3_gpb_plugin.git", {branch, "2.22.5"}}} ]}
    

添加项目依赖

修改 rebar.config,按下边格式添加 deps

image.png

  1. hex 包依赖

     {elli, "~> 3.3.0"}
    
  2. git 包依赖

     {elli, {git, "git://github.com/elli-lib/elli.git", {tag, "3.3.0"}}} 
    
  3. 本地包依赖 方法一 通过_checkouts 目录

     项目根目录下创建_checkouts 目录
     在_checkouts 目录下添加依赖包
     rebar.config deps 下添加依赖声明 {local_lib, "3.3.0"}
     _checkout 目录下的包优先级最高,会覆盖git和hex的依赖
    
  4. 本地项目依赖 方法一 通过_checkouts 目录

     项目根目录下创建_checkouts 目录
     在_checkouts 目录下添加依赖项目的symlink
     rebar.config deps 下添加依赖声明 {my_lib, "3.3.0"}
    
  5. 本地项目依赖 方法二 通过rebar3插件,推荐用该方法,项目更简洁

    rebar3.cofig 添加插件 {plugins, [ rebar3_path_deps]}.
    deps 下添加本地项目依赖 {myutils, {path, "D:/allen_github/yinye1024/myutils"}}
    

    注意

    通过插件声明的依赖会有一个小小的更新问题,就是被依赖的项目有代码改动的时候,上层项目编译的时候不会立刻更新,没有细看这个插件的代码实现,应该是插件的检查更新判断逻辑有问题。

    解决方案

     底层被依赖项目先编译 $ rebar3 compile
     手动删除当前目录_build下面的对应的目录(这个是从被依赖项目拷贝过来的)
     当前目录编译 $ rebar3 compile       
    

依赖更新

更新 hex 缓存包

$ rebar3 update

更新项目依赖包

方法一

    $ rebar3 upgrade <depname>

方法二

    $ rebar3 upgrade app1,app2,app3
    $ rebar3 upgrade  %% 全部更新               

方法三 (好吧,这个是最常用的方法,也不会把rebar.lock加入版本管理)

   直接删除 rebar.lock(该文件记录了下载包的md5) 和 _build 目录,
   然后$ rebar3 compile

愉快的编码。。。

编译

$ rebar3 compile
输出目录  _build/default/lib/项目名称

测试 单独补一章

本地起服务调试

rebar.config 添加 shell 本地调试启动参数,用默认的不添加也可以
{shell, [
  % {config, [{config, "config/sys.config"}]},
    {apps, [APP_Name]}
]}.

启动命令
$ rebar3 shell

发布 *游戏的发布和应用的发布不一样,会单独补一章 *

关于rebar.config 配置

官网参考

推荐配置

{dialyzer, [
    {warnings, [
       %% Warn about undefined types and unknown functions
       unknown
    ]}
]}.

{xref_checks,[
    %% enable most checks, but avoid 'unused calls' which is often
    %% very verbose
    undefined_function_calls, undefined_functions, locals_not_used,
    deprecated_function_calls, deprecated_functions
]}.

{profiles, [
    {test, [
        %% Avoid warnings when test suites use `-compile(export_all)`
        {erl_opts, [nowarn_export_all]}
    ]}
]}.

{shell, [
      % {config, [{config, "config/sys.config"}]},
        {apps, [APP_Name]}
    ]}.