DigitalOcean托管Ubuntu服务器执行ng build卡在@angular/core编译步骤如何解决
问题原因
这个问题90%以上的概率出在服务器的资源和环境配置上,本地能正常构建说明代码本身没有问题:
- 内存不足:Angular编译核心库时内存消耗极高,1G内存的低配DigitalOcean服务器没有足够内存支撑编译过程,会直接卡住进程。
- 权限不足:
/var/www目录默认归www-data用户所有,普通用户执行构建没有写入权限,会导致编译到一半无响应。 - 版本不兼容:服务器上的Node.js、Angular CLI版本和本地开发环境版本差异过大,会出现兼容性异常卡住。
- 无交换分区:服务器默认没有开启交换分区,内存占满后没有缓冲空间,进程会直接僵死。
解决方法
优先处理内存问题
- 开启交换分区缓解内存压力
执行以下命令临时开启2G交换分区:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
执行free -h确认swap分区显示正常即可。
2. 给Node.js进程加大内存限制
不要直接用ng build执行构建,改成以下命令:
node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build
如果需要长期使用,可以修改package.json的scripts字段:"build": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build"
之后直接执行npm run build即可。
修复目录权限问题
不要直接在/var/www目录下执行构建,建议将源码存放在个人用户目录下,构建完成后再将产物复制到站点目录:
# 构建完成后复制产物到站点目录 sudo cp -r ./dist/你的项目名/* /var/www/你的站点目录/ # 修复站点目录权限 sudo chown -R www-data:www-data /var/www/你的站点目录 sudo chmod -R 755 /var/www/你的站点目录
如果一定要在站点目录下构建,先给当前用户授予目录权限:sudo chown -R $USER:$USER /var/www/你的项目目录
对齐环境版本
执行node -v和ng version查看服务器上的Node.js、Angular CLI版本,和本地Windows环境的版本保持一致,版本不匹配可以用nvm切换到对应Node.js版本后重新安装依赖。
清理依赖重试
如果以上操作都做了还是卡住,删除现有依赖重新安装:
rm -rf node_modules package-lock.json npm cache clean --force npm install ng build
内容的提问来源于stack exchange,提问作者Noble Eugene
相关产品推荐
相关产品推荐

