我工作的项目中的. env.sample文件总是过时的。我该如何写一个一行程序来递归地搜索项目中的所有文件,并将使用的env变量提取到一个. env.sample文件中呢?
理想情况下,一行bash脚本应该与以下所有格式匹配
process.env.MY_VAR
process.env.MY-VAR
process.env["MY_VAR"]
process.env['MY_VAR']
process.env[MY_VAR] // MY_VAR here being a constant which holds the actual key value
找到唯一的值并打印到一个示例.env文件中,该文件可以插入到预提交钩子或管道中。
1条答案
按热度按时间pod7payv1#
下面是一行程序,应该可以使用
分解它
grep -rhoP "process\.env[\.\[](\"|\')?[a-zA-Z0-9_\-]+(\"|\')?[\]]?" ./src
Grep修饰符
process\.env[\.\[](\"|\')?[A-Z0-9_\-]+(\"|\')?[\]]?
process.env
[\.\[]
与文字“.”或“[”匹配(\"|\')?
可选择匹配单引号或双引号[A-Z0-9_\-]+
匹配一个或多个大写字母、数字、下划线和破折号(\"|\')?
可选择匹配单引号或双引号[\]]?
可以选择匹配文字“]”sort --unique
我们只需要不同的值并按字母顺序排序(使用一致的键排序列表使diff比较更容易)sed -r -n 's|^.*\.([[:upper:]0-9_]+).*$|\1=|p'
注意无论如何,这都不是一个简单或全面的方法。例如,它不匹配小大小写环境变量或大量其他访问方法,例如
const { MY_VAR } = process.env
之类的对象解构