博客 / 技术笔记

从零搭建 Astro 博客踩坑实录(一):Git 与 node_modules 的噩梦

前言

最近用 Astro + Tailwind 从零搭建了一个个人博客 lslife.cn,整个过程比想象中曲折。今天来记录一下遇到的各种坑和解决方案,供有类似经历的朋友参考。

第一个坑:node_modules 反复提交

现象

每次 git add . && git commit && git push 后,仓库里总是莫名其妙多出 node_modules 目录,导致仓库体积暴增,而且部署到服务器时问题不断。

排查过程

  1. 检查 .gitignore 文件 - 内容正确:
node_modules/
dist/
.astro/
  1. 原因分析:文件已经被 Git 跟踪后,即使加入 .gitignore 也不会生效!

解决方案

Terminal window
# 1. 取消跟踪
git rm -r --cached node_modules
# 2. 提交变更
git commit -m "Remove node_modules from tracking"
# 3. 推送
git push

教训

如果文件已经被 Git 跟踪,.gitignore 不会生效。必须先取消跟踪。

第二个坑:服务器上的 .gitignore 乱码

现象

本地正常,但服务器上拉取后 node_modules 又出现了。

原因

Windows 的 CRLF 和 Linux 的 LF 换行符不一致,导致 .gitignore 文件在服务器上读取异常。

解决方案

Terminal window
# 最简单粗暴的方案:重新 clone
cd /www/wwwroot
rm -rf lslife
git clone git@gitee.com:maydayls/lslife.git
cd lslife
npm install
npm run build

第三个坑:服务器权限问题

现象

clone 后执行 npm run build 报错:

sh: /www/wwwroot/lslife/node_modules/.bin/astro: Permission denied

原因

npm install 创建的 .bin 链接文件没有执行权限。

解决方案

Terminal window
chmod +x node_modules/.bin/astro
npm run build

总结

  1. .gitignore 不生效:先 git rm --cached 取消跟踪
  2. 跨平台换行符问题:用 git config --global core.autocrlf input 统一处理
  3. 服务器权限:clone 后记得给 bin 目录加执行权限

下一篇我们聊聊响应式布局的坑。