在路径中加载所有erlang模块

时间:2011-08-03 08:16:03

标签: module erlang erl

使用Easy way of loading projects with rebar dependencies的答案,现在可以自动解决依赖关系,但不会自动加载它们。

那么,如何自动加载我的ebin和/ deps / * / bin路径中的所有模块?这样,在使用Erlang shell选项卡完成时它们就可用了,这大大加快了我的开发过程。

我的解决方案基于Adam Lindberg的优秀答案https://gist.github.com/1131312它只会自动加载项目模块,因此在erl启动时几乎没有延迟。

2 个答案:

答案 0 :(得分:9)

这个片段可以解决问题:

[code:ensure_loaded(list_to_atom(filename:rootname(filename:basename(F))))
 || P <- code:get_path(), F <- filelib:wildcard(P ++ "/*.beam")].

将它作为一行放在~/.erlang文件中(包括点:.),它将在启动任何 Erlang shell时执行。但要注意,它的速度非常慢!

» time erl -noshell -s init stop
erl -noshell -s init stop  0.11s user 0.02s system 11% cpu 1.143 total # Without
» time erl -noshell -s init stop
erl -noshell -s init stop  7.31s user 1.08s system 88% cpu 9.480 total # With 

答案 1 :(得分:4)

如果你产生了这个过程,你将获得一个非常快的开始。

LP = fun() -> [code:ensure_loaded(list_to_atom(filename:rootname(filename:basename(F)))) || P <- code:get_path(), F <- filelib:wildcard(P ++ "/*.beam")] end.
spawn(LP).
〜/ .erlang文件中的