首先确认erlang环境变量配置正确,确保系统能识别erl命令;然后在sublime Text中创建自定义构建系统,配置包含"shell": true的JSON,正确调用erlc编译和erl运行命令,保存为Erlang.sublime-build;最后在Erlang文件中使用-module和-export定义main/0函数,选择对应构建系统并按下Ctrl+B运行。若仍报错,检查路径、语法、编码及权限问题。推荐使用Rebar3管理项目依赖与构建,提升开发效率。
Erlang代码在sublime text里跑不起来,通常不是Erlang本身的问题,而是Sublime Text没有正确地找到Erlang的执行环境,或者你的构建配置有误。最直接的解决办法是确保Erlang环境路径设置无误,并为Sublime Text配置一个能正确调用Erlang编译和运行命令的自定义构建系统。
解决方案
解决这个问题,我们需要从系统环境和Sublime Text配置两方面入手。
首先,确认Erlang环境已正确安装并可被系统识别。 打开你的命令行工具(windows的cmd或PowerShell,macos/linux的Terminal),输入
erl
并回车。如果Erlang成功启动,显示其版本信息并进入Erlang shell,那么说明Erlang本身安装没问题。如果提示“
erl
不是内部或外部命令,也不是可运行的程序或批处理文件”,那问题就出在系统环境变量上。
配置系统环境变量:
- Windows:
- 找到你的Erlang安装目录,比如
C:Program Fileserl-26.2
。
- 右键“此电脑” -> 属性 -> 高级系统设置 -> 环境变量。
- 在“系统变量”下,新建一个变量,变量名为
ERLANG_HOME
,变量值为你的Erlang安装路径(例如
C:Program Fileserl-26.2
)。
- 找到
Path
变量,双击编辑,添加
%ERLANG_HOME%bin
。确保它在其他路径之前,或者至少能被系统找到。
- 保存所有更改,并重启你的电脑或至少重启命令行工具和Sublime Text,让环境变量生效。
- 找到你的Erlang安装目录,比如
- macOS/Linux:
- Erlang通常通过Homebrew(macOS)或包管理器(Linux)安装,路径会自动配置。如果手动安装,你可能需要编辑
~/.bashrc
,
~/.zshrc
或
~/.profile
文件。
- 添加类似
export ERLANG_HOME="/usr/local/opt/erlang/lib/erlang"
(Homebrew路径示例) 或你的安装路径。
- 然后添加
export PATH="$ERLANG_HOME/bin:$PATH"
。
- 保存文件后,运行
source ~/.bashrc
(或对应的配置文件) 来刷新环境变量。
- Erlang通常通过Homebrew(macOS)或包管理器(Linux)安装,路径会自动配置。如果手动安装,你可能需要编辑
配置Sublime Text构建系统: 这是让Sublime Text知道如何运行Erlang代码的关键一步。
-
打开Sublime Text。
-
点击
Tools
->
Build System
->
New Build System...
。
-
Sublime Text会打开一个名为
untitled.sublime-build
的新文件。将以下json配置粘贴进去:
{ "cmd": ["erlc", "$file", "&&", "erl", "-noshell", "-s", "${file_base_name}", "main", "-s", "init", "stop"], "file_regex": "^(.*?):([0-9]+):([0-9]+): (.*)$", "selector": "source.erlang", "shell": true, "working_dir": "$file_path" }
- 解释一下这个配置:
-
cmd
: 这是执行的命令。它首先调用
erlc
编译当前打开的Erlang文件(
$file
),然后使用
&&
(在shell模式下)连接另一个命令,即
erl
来运行编译后的模块。
-noshell
表示不进入Erlang shell,
-s ${file_base_name} main
表示调用当前模块(文件名不带扩展名)的
main/0
函数,
-s init stop
则是在执行完毕后安全退出Erlang运行时。
-
file_regex
: 用于捕获编译错误信息的正则表达式,让Sublime Text能高亮错误行。
-
selector
: 指定这个构建系统适用于Erlang文件(通常是
.erl
)。
-
shell: true
: 非常关键,它告诉Sublime Text通过系统的shell来执行
cmd
命令。这样
&&
操作符才能正常工作,尤其是在Windows上。
-
working_dir
: 将工作目录设置为当前文件的路径,这样Erlang就能找到同目录下的其他模块。
-
- 解释一下这个配置:
-
将这个文件保存为
Erlang.sublime-build
(或者你喜欢的任何名字,但建议保持
.sublime-build
后缀),保存在Sublime Text默认的User目录下。
-
现在,打开一个Erlang文件(比如
hello.erl
,内容如下:
-module(hello). -export([main/0]). main() -> io:format("Hello from Erlang in Sublime Text!~n").
)。
-
点击
Tools
->
Build System
,选择你刚刚创建的
Erlang
构建系统。
-
按下
Ctrl+B
(Windows/Linux) 或
Cmd+B
(macOS) 运行代码。你应该能在Sublime Text底部的输出面板看到“Hello from Erlang in Sublime Text!”。
如果你的Erlang代码没有
main/0
函数,或者你只是想编译,可以简化
cmd
命令,例如只保留
"cmd": ["erlc", "$file"]
。
为什么我的Erlang代码在Sublime Text里运行总是报错?常见错误分析
说实话,我个人遇到过好几次,就是因为PATH没设对,或者Sublime Text压根不知道要去哪里找
erl
这个命令。这大概是90%的问题来源。但除了这个,还有一些其他常见的坑:
-
erl
或
erlc
命令未找到 (Command Not Found)
:这通常就是上面提到的环境变量问题。系统找不到Erlang的执行文件,Sublime Text自然也无从调用。检查Path
变量,确保
ERLANG_HOME/bin
(或等效路径)确实存在且可访问。
- Erlang代码本身的语法错误或运行时错误:即使环境配置正确,如果你的
.erl
文件有语法错误,
erlc
编译时就会报错。比如忘记了句号(
.
)结尾,或者变量名大小写不对。运行时错误则可能是函数调用不存在、模块未加载等。这些错误信息通常会显示在Sublime Text的构建输出面板中,仔细阅读它们能帮你定位问题。
- Sublime Text构建系统配置错误:
-
shell: true
漏掉了:如果你在
cmd
里使用了像
&&
这样的shell特定操作符,但没有设置
"shell": true
,那么命令会执行失败。Sublime Text会尝试直接运行整个字符串,而不是通过shell。
-
cmd
命令写错:比如
erlc
拼写错误,或者调用Erlang运行时参数不对。
-
selector
不匹配:如果
selector
设置不正确,Sublime Text可能不会自动为Erlang文件选择你的构建系统。不过通常
source.erlang
是正确的。
-
- 文件编码问题:虽然Erlang对UTF-8支持良好,但偶尔一些老旧的系统或特殊字符可能导致编码问题。确保你的Erlang源文件以UTF-8编码保存。
- 权限问题:在极少数情况下,如果你的Erlang安装目录或项目目录的权限设置不当,可能导致
erl
或
erlc
无法读取或写入文件。这在Linux系统上比较常见。
遇到错误时,最重要的是不要慌,一步步排查。先确认Erlang本身在命令行能跑,再看Sublime Text的配置,最后才是检查代码逻辑。
除了Sublime Text,还有哪些主流ide或编辑器适合开发Erlang?
我个人觉得,如果你是Erlang的重度用户,或者项目比较复杂,IntelliJ idea配合其Erlang插件是真的香。但如果只是写写小工具或者脚本,VS Code的轻量和插件生态则更胜一筹。
-
intellij idea (搭配Erlang插件):
-
visual studio Code (VS Code) (搭配Erlang/Elixir插件):
- 优点:轻量级、启动快,拥有庞大的插件生态系统。通过安装Erlang或Elixir(因为两者语法相似,很多插件同时支持)插件,可以获得语法高亮、代码片段、基本代码补全、格式化等功能。调试功能也逐渐完善。
- 缺点:核心功能相对IDE来说仍有差距,例如重构能力不如IntelliJ IDEA。性能在大项目下可能不如专用IDE。
- 适用场景:个人项目、脚本编写、中小型Erlang项目,以及喜欢高度定制化和轻量级体验的开发者。
-
Emacs (搭配Erlang Mode):
- 优点:对于Emacs老用户来说,Erlang Mode提供了非常强大的功能,包括代码导航、交互式shell(
erl
)、编译、调试等。高度可定制,可以根据个人习惯打造极致的开发环境。
- 缺点:学习曲线非常陡峭,对于新手来说门槛很高。
- 适用场景:Emacs资深用户,追求极致效率和键盘操作的开发者。
- 优点:对于Emacs老用户来说,Erlang Mode提供了非常强大的功能,包括代码导航、交互式shell(
-
Vim (搭配Erlang插件):
- 优点:与Emacs类似,Vim用户可以通过各种插件(如
vim-erlang
)获得Erlang开发支持。轻量级,启动快,远程开发友好。
- 缺点:同样学习曲线陡峭,依赖插件生态,配置起来需要一定时间和精力。
- 适用场景:Vim资深用户,服务器端开发,远程ssh环境。
- 优点:与Emacs类似,Vim用户可以通过各种插件(如
选择哪个工具,很大程度上取决于你的个人喜好、项目规模和团队协作习惯。没有绝对最好的,只有最适合你的。
如何更高效地管理Erlang项目依赖和构建?Rebar3的引入
说实话,刚开始学Erlang的时候,我也是手动
erlc
来
erl
去的,但一旦项目里有依赖,或者文件一多,那简直是噩梦。Rebar3简直是救星。
对于任何稍具规模的Erlang项目,手动管理编译、测试和依赖是不可持续的。这时候,你就需要像Java世界的maven/gradle、node.js世界的npm一样的构建工具——Rebar3。
Rebar3是什么? Rebar3是一个功能强大的Erlang构建工具和依赖管理器。它遵循Erlang/OTP的约定,旨在简化Erlang应用程序、库和发布版本的生命周期管理。它可以帮你:
- 创建新的Erlang项目骨架。
- 声明和下载外部依赖。
- 编译Erlang代码和C/C++ NIFs。
- 运行测试(EUnit、Common Test)。
- 生成文档。
- 创建可部署的发布版本(release)。
- 运行Erlang shell,加载项目代码和依赖。
Rebar3的核心功能和使用:
-
项目创建: 你可以用
rebar3 new app my_app
创建一个新的Erlang应用程序项目,或者
rebar3 new lib my_lib
创建一个库。这会自动生成一个符合OTP约定的项目结构,包括
src
、
ebin
、
等目录,以及一个
rebar.config
文件。
-
依赖管理: 在
rebar.config
文件中,你可以声明项目的外部依赖。Rebar3会负责从Hex.pm(Erlang/Elixir的包管理器)或其他git仓库下载、编译这些依赖。
%% rebar.config 示例 {deps, [ {cowboy, {git, "https://github.com/ninenines/cowboy.git", {tag, "2.9.0"}}}, {jsx, "~> 3.0"} %% 从Hex.pm获取 ]}.
然后运行
rebar3 deps
来下载和编译依赖。
-
编译项目: 在项目根目录运行
rebar3 compile
,Rebar3会根据
rebar.config
的配置,编译你的项目代码和所有依赖。它会自动处理模块之间的依赖关系,确保编译顺序正确。
-
运行测试: Rebar3内置了对EUnit和Common Test的支持。只需运行
rebar3 eunit
或
rebar3 ct
即可执行项目的测试。
-
创建发布版本 (Release): 这是Rebar3最强大的功能之一。你可以用
rebar3 release
命令创建一个包含Erlang运行时、你的应用程序代码和所有依赖的可部署包。这个包可以在没有Erlang安装的机器上直接运行,非常适合部署。
-
交互式Shell: 运行
rebar3 shell
会启动一个Erlang shell,并且会自动加载你的项目代码和所有依赖,让你可以在一个完整的项目环境中进行交互式开发和调试。
Rebar3与Sublime Text的结合: 你甚至可以为Sublime Text配置一个构建系统,让它直接调用Rebar3命令,比如:
{ "cmd": ["rebar3", "compile"], "selector": "source.erlang", "working_dir": "$project_path" // 或者 "$file_path" }
这样,你就可以在Sublime Text里一键编译整个Rebar3项目了。当然,更高级的用法可能是在终端直接使用Rebar3,因为它提供了更丰富的命令和反馈。
引入Rebar3,不仅让Erlang项目的构建和管理变得有条不紊,也极大地提升了开发效率和团队协作的便利性。它是Erlang生态中不可或缺的工具。
评论(已关闭)
评论已关闭