Node.js项目:如何用Pre-Commit Hook自动生成.env.example文件
自动化同步.env配置项到.env.example的Git预提交钩子方案
需求背景
项目中.env存储敏感配置(已加入.gitignore不提交),.env.example作为模板供协作方参考。手动同步两者的配置键容易遗漏,需要通过Git预提交钩子自动生成.env.example。
实现步骤
- 创建Git预提交钩子脚本
在项目根目录的.git/hooks文件夹下,新建pre-commit文件,写入以下Bash脚本:
#!/bin/bash # 从.env生成.env示例文件:保留注释、空行,清空所有配置项的值 awk ' # 保留注释行和空行 /^#/ || /^$/ { print $0; next } # 处理配置项行,仅保留键名和等号 { # 找到第一个等号的位置,分割键和值 eq_pos = index($0, "=") if (eq_pos > 0) { printf "%s=\n", substr($0, 1, eq_pos) } else { # 若行中无等号,直接保留原行(兼容异常情况) print $0 } } ' .env > .env.example # 将更新后的.env.example加入本次提交 git add .env.example
- 赋予脚本执行权限
在终端执行以下命令,确保钩子脚本可运行:
chmod +x .git/hooks/pre-commit
效果说明
每次执行git commit时,钩子会自动读取.env文件:
- 完整保留所有注释行和空行
- 将所有
KEY=value格式的配置项转换为KEY= - 自动把更新后的
.env.example加入提交,无需手动操作
额外提示
如果需要对特定配置项做特殊处理(比如保留某些默认值),可以在awk脚本中添加条件判断。例如要保留NODE_ENV的默认值:
/^NODE_ENV=/ { print "NODE_ENV=development"; next }
将这行代码插入到/^#/ || /^$/ { ... }之后即可。
内容的提问来源于stack exchange,提问作者abdp
相关产品推荐
相关产品推荐

