如何编写Bash单行脚本提取Node.js项目环境变量生成.env.sample
生成更新.env.sample的Bash单行脚本
以下单行脚本可递归搜索项目目录,提取所有符合指定格式的已用环境变量,去重后生成最新的.env.sample文件:
grep -rEo 'process\.env(\.[A-Za-z0-9_-]+|\[(["'\''A-Za-z0-9_-]+)\])' . | sed -E 's/process\.env(\.|\[["'\''?])([A-Za-z0-9_-]+)["'\''?]?\]/\2/g' | sort -u > .env.sample
脚本各部分说明
grep -rEo 'process\.env(\.[A-Za-z0-9_-]+|\[(["'\''A-Za-z0-9_-]+)\])' .:递归遍历当前目录所有文件,匹配并输出所有符合格式的process.env变量引用片段-r:递归搜索-E:启用扩展正则表达式-o:仅输出匹配的文本部分
sed -E 's/process\.env(\.|\[["'\''?])([A-Za-z0-9_-]+)["'\''?]?\]/\2/g':剥离process.env前缀及引号、括号,提取纯变量名sort -u:对变量名排序并去重,避免重复条目> .env.sample:将最终结果写入项目根目录的.env.sample文件
进阶优化(排除指定目录)
若需跳过node_modules、.git等无需扫描的目录,可给grep添加--exclude-dir参数:
grep -rEo --exclude-dir=node_modules --exclude-dir=.git 'process\.env(\.[A-Za-z0-9_-]+|\[(["'\''A-Za-z0-9_-]+)\])' . | sed -E 's/process\.env(\.|\[["'\''?])([A-Za-z0-9_-]+)["'\''?]?\]/\2/g' | sort -u > .env.sample
使用场景
- 直接在项目根目录运行脚本,手动更新.env.sample
- 将脚本加入预提交钩子(如husky),每次代码提交前自动同步最新环境变量
- 集成到CI/CD流水线,确保构建时始终使用最新的.env.sample模板
内容的提问来源于stack exchange,提问作者Manquer
相关产品推荐
相关产品推荐

