Windows系统下如何修复编译依赖:bcrypt_elixir失败的错误?
解决Windows下bcrypt_elixir编译失败("nmake" not found)的问题
Hey,这个坑我在Windows上跑Phoenix项目时踩过好几次!核心原因很简单:bcrypt_elixir需要编译原生的C扩展代码,而Windows默认没装nmake(微软的命令行构建工具),导致Mix没法完成依赖编译。下面给你几个靠谱的解决办法,按优先级来:
1. 安装Visual Studio构建工具(最推荐,一劳永逸)
这是最稳妥的方式,一次性搞定所有编译环境:
- 先下载Visual Studio Installer(如果已经装过VS,直接打开它就行)
- 在「工作负载」里找到「桌面开发使用C++」,一定要勾选这几个核心组件:「MSVC vxxx生成工具」、「Windows SDK」、「C++生成工具核心功能」(版本号根据你的VS版本调整,比如2022版就选对应2022的组件)
- 安装完成后必须重启你的终端/命令提示符!不然新的环境变量不会生效
- 回到项目目录,依次运行这几个命令:
mix deps.compile bcrypt_elixir mix phx.server
2. 手动把nmake路径加入系统PATH(适合已装VS但环境未生效的情况)
如果已经装了Visual Studio还是报错,大概率是nmake.exe的路径没被系统识别:
- 找到你的VS安装路径,比如默认路径是
C:\Program Files\Microsoft Visual Studio\2022\Community\BuildTools\bin(根据你装的VS版本、版本类型调整,比如Professional版就把Community换成Professional) - 打开系统环境变量设置,把上面找到的路径添加到
PATH列表中 - 重启终端后,先测试
nmake /?,如果能弹出帮助信息,说明路径配置成功 - 然后清理旧依赖再重新编译:
mix deps.clean bcrypt_elixir mix deps.get mix deps.compile bcrypt_elixir
3. 使用预编译的二进制版本(备选,适合不想装C++工具的情况)
要是实在不想装C++构建工具,可以试试预编译好的版本,但要注意版本兼容性:
- 打开项目根目录的
mix.exs,修改bcrypt_elixir的依赖配置(以下以3.0.0版本为例,记得对应你项目需要的版本):{:bcrypt_elixir, "~> 3.0", override: true, github: "riverrun/bcrypt_elixir", tag: "v3.0.0", precompiled: true} - 然后运行这两个命令:
注意:预编译版本可能和你的Elixir/Erlang版本不兼容,所以优先推荐前两种方法。mix deps.get mix phx.server
小提示
- 要是用PowerShell的话,尽量以管理员身份运行,避免权限不足的问题
- 编译前可以先清空所有依赖缓存:
mix deps.clean --all,再重新获取依赖,有时候能解决奇怪的缓存冲突问题
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

