工作流就是根据经验总结出来的研发的一种模式,新开项目有哪些步骤,每一步要干些什么,模式化,流程化是效率的关键。 -- 凯撒的归凯撒,上帝的归上帝,剩下好玩的。。。
rebar3 新建项目
指令 # rebar3 new TYPE PRJ_NAME
TYPE 类型有下列五种
- app 有状态的OTP应用,有监控树,可以单独起服务。
- lib 无状态的OTP应用,无监控树,用作工具库。
- release 可作为应用发布的项目,会打包所有的依赖进去,做成发布包。
- escript 作为可执行脚本发布,相比直接写脚本,好处是可以方便各种依赖管理,也更模块化。
- plugin rebar3 插件
import 项目到 idea Module
以模块的方式导入
File->Project Structure ->Modules->点+号->Import module
模块一般设置
-
Sources
.rebar3, _build, _checkout, log, 等不需要关注的目录标成 Excluded。
include, erlang头文件目录 标成 Includes。
src, 代码源目录标成 Sources。
test, 测试目录标成 Tests。
搜索去除beam文件, Exclude files:*.beam。
-
Paths 不需要理,一般不会使用这个目录,默认就好
-
Dependencies
添加本地idea模块的依赖,方便模块代码的点击跳转和识别。这样的话,在代码里面依赖了这个项目模块的话,Ctrl+点击就可以跳转到相应的项目和模块。
添加插件依赖
-
本地依赖
把插件包下载到 _checkouts目录下(没有则自己创建,名字一样就可以了) rebar.config 声明插件依赖 {plugins, [rebar3_gpb_plugin, "2.22.5"]}
-
git 依赖
rebar.config 直接声明插件依赖 {plugins,[ {rebar3_gpb_plugin, {git, "https://github.com/lrascao/rebar3_gpb_plugin.git", {branch, "2.22.5"}}} ]}
添加项目依赖
修改 rebar.config,按下边格式添加 deps
-
hex 包依赖
{elli, "~> 3.3.0"}
-
git 包依赖
{elli, {git, "git://github.com/elli-lib/elli.git", {tag, "3.3.0"}}}
-
本地包依赖 方法一 通过_checkouts 目录
项目根目录下创建_checkouts 目录 在_checkouts 目录下添加依赖包 rebar.config deps 下添加依赖声明 {local_lib, "3.3.0"} _checkout 目录下的包优先级最高,会覆盖git和hex的依赖
-
本地项目依赖 方法一 通过_checkouts 目录
项目根目录下创建_checkouts 目录 在_checkouts 目录下添加依赖项目的symlink rebar.config deps 下添加依赖声明 {my_lib, "3.3.0"}
-
本地项目依赖 方法二 通过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]}
]}.