Please note that you shouldn’t commit
.env.*
files to your source control and rather use options given by your Continuous Deployment (CD) provider.
在 Gatsby.js 文档中提到, .env.*
不应该提交到 git 中,但是 .env.*
里的变量不都是给项目用的吗?最终编译后可以在代码中找到对应的值,所以对用户而言,这些变量都是 public 的。
所以我觉得 .env.*
可以放到 git 中,即使是一个开源项目。
1
R18 2020-04-10 15:32:44 +08:00
.env 是一个配置文件,里面可能会有用户的私人配置,密钥之类的东西。通俗做法是 写一个 env 文件来进行通用配置,用户 copy 后自由发挥
|
2
Vegetable 2020-04-10 15:33:12 +08:00
说两个我想到的点
我曾经因为一个 react-native 项目的.env 文件包含了别人的 JavaHome 还是 AndroidHome 变量,耽误了不少时间. 有一些密码会通过环境变量保存, 上传到仓库并不安全 |
3
FaiChou OP @Vegetable #2 「有一些密码会通过环境变量保存, 上传到仓库并不安全」.env 本身就不应该放密码等信息,所以两码事。
|
4
FaiChou OP @Vegetable #2 我明白你的意思了,有些小白用户会错误的将密码放到 .env 来管理,所以还是建议大家 .env 不要托管到 git 中。是吧
|
5
tabris17 2020-04-10 15:42:14 +08:00
你想和大家分享你的密码?
|
6
jarontai 2020-04-10 15:44:45 +08:00 via iPhone 3
.env 文件本身肯定不入 git 啊,入 git 的应该是一个模版比如:.env.example,其中添加配置示例和注释,给用户拷贝然后进行配置
|
7
FaiChou OP @tabris17 #5 有什么密码需要放到 .env 中?放到 .env 中就代表你要用这个变量,最终 webpack 打包工具会将 .env 中的值赋给项目代码引用的地方,对前端来说,代码是 public 的,任何人都可以看到「密码」。
|
8
int64ago 2020-04-10 15:46:53 +08:00 1
|
9
int64ago 2020-04-10 15:47:29 +08:00
不要说我什么不打码……这些人既然公开了这些就不值得同情
|
10
koolob 2020-04-10 15:48:21 +08:00
实际用到的.env 不要传,可以传的是.env 文件的模版。
另外可以加一个脚本,通过参数来生成.env 文件。 其实这是 git 上到底应该放什么不放什么的问题。 我觉得凡是跟运行环境有关的个性化的东西,就都不要传 git 。比如本地目录路径、本地测试用的账号密码什么的。 |
11
Raincal 2020-04-10 15:48:36 +08:00 via Android
有些变量只在构建阶段会用到,并不能在构建后的代码中看到
|
12
skys215 2020-04-10 15:50:56 +08:00
知道为什么叫.env 吗? env 就是 environment 的缩写,就是说,这个文件里的值是只针对当前环境的,因此.env 不应该跟着传上去。如果想统一管理配置,那有对应的软件可以支持。好像叫 zookeeper 什么的。
|
13
b821025551b 2020-04-10 15:50:56 +08:00 1
你的眼光不应该只局限于前端范围,后端也同样要用到.env 之类的,里面是放了各种服务的 key
|
14
FaiChou OP @int64ago #8 我觉得这位用户的项目开源出来就是个错误。。发现刚刚开源的 ~ 正如 4L 提到的,小白用户错误的将 .env 中贴了密码等信息。即使不放 .env 中,程序中也能找到,再不济抓个包也能看到吧。
|
15
ngrok111 2020-04-10 15:53:14 +08:00
影响不大的可以写入
env_example |
16
FaiChou OP @b821025551b #13 哦哦,谢谢提醒,我没有接触过后端。我 append 下前提概要。
|
17
iyear 2020-04-10 15:57:04 +08:00
gitignore 加*.env ,自己的配置就用这个后缀
再新建一个配置模板文件.env.example README 让用户下载模板自己改 |
19
dtsdao 2020-04-10 16:04:40 +08:00
前端的 .env 可以放后端地址啊,你不可能直接拿生产服务器测试吧?这个东西配置的时候在开发文档里说明一下就是了
|
20
FaiChou OP @dtsdao #19 开源项目,没有什么生产 /测试服务器地址吧。 平时的业务项目,.env 放 git 里,也没毛病吧
|
21
littleylv 2020-04-10 16:10:47 +08:00 2
不应该传.env
要传.env.example 然后 example 里注意不要写正式的,用通用字符代替,比如 password=YOUR_PASSWORD (而不是 123abc ) |
22
FaiChou OP @tabris17 #18 嗯,后端的就涉及 private_key 了,相对来说,前端用的都是些 public_key 。所以前端 public_key 也无所谓被 public 出去。
|
23
momocraft 2020-04-10 16:13:51 +08:00
想做就做吧 我看别人花时间说服你也挺累的
自己的东西自己负责而已 |
24
FaiChou OP @momocraft #23 当然不可能这么做 ^_^,也不需要被说服。 想了解下前端 .env 放 ignore 中的其他理由。
|
25
offline 2020-04-10 16:22:06 +08:00
.env.example 放注释
.env.default 放默认,这个应 |
26
offline 2020-04-10 16:23:28 +08:00
.env.example 放实例
下面两个都应该忽略 .env.default 放默认,这个应该在自己的服务器上生成,不提交 git .env 放本地私有 |
27
hfpp2012 2020-04-10 16:27:41 +08:00
肯定不放 git 中呀
|
28
kasper4649 2020-04-10 16:30:24 +08:00 2
[x] .env
[✓] .env.example |
29
ben1024 2020-04-10 16:32:38 +08:00
不放 .env, 进行线上编译才是正确
|
30
BenX 2020-04-10 16:45:07 +08:00
最佳实践来看,可以放一个样板同步上到 repo,例如 .env.example
同步还要在 readme 中描述解释清楚里面需要有哪些变量。 自己本地的 .env 就不要放到 repo PS,遇到过啃爹的一个项目就是 .env 没放,readme 也不说和写有哪些变量。 要跑起来要不能抓到人,要不就只有自己看代码找去了 |
31
jun0205 2020-04-10 16:50:43 +08:00
.env.example 需要
|
32
redam 2020-04-10 16:53:42 +08:00
前端可以有.env.local,local 的就 ignore
|
33
polun 2020-04-10 17:17:53 +08:00
如果放 git 里,就不需要 .env 了,直接静态变量不更好吗。
|
34
ratatata 2020-04-10 17:46:34 +08:00
.env 不能放,但是应该放一个 .env.example,列出需要配置的变量
|
35
MeteorCat 2020-04-10 18:58:06 +08:00 via Android
example.env ,之后忽略文件.env
|
36
Chingim 2020-04-10 19:09:45 +08:00 via Android
不要教条主义,含敏感信息的就不要放,不含的无所谓,含有构建项目需要的信息(比如各种环境下的 API 地址)那就必须放到项目里
|
37
Chingim 2020-04-10 19:11:14 +08:00 via Android
因为不同的项目从 env 文件中读取的信息都不一样,何必纠结。
|
38
Kobayashi 2020-04-10 19:38:38 +08:00 via Android
不放。会放一个模板 .env.example
|
39
msg7086 2020-04-10 19:51:37 +08:00 1
.env 从名字上来说就是对每个环境的分别配置。
既然是对每个环境有效,当然不应该放在「对所有环境有效」的 Git 中。 这和前端后端没有关系,这是.env 本身的身份决定的。 是否 Public 和是否包含.env 没有直接关系。你源代码都是 Public 的,为什么变量不放在源码的配置文件里? |
40
RRRSSS 2020-04-10 20:05:56 +08:00
一般开源项目里都这么干:
.env.simple 文件放 git,然后里面用变量表示,比如: DB_PASSWORD = ${your_password} 然后 .env 加入 .gitignore 最后 README 里加上,要用户 `cp .env.simple .env`,这样可以控制每个人是不同的配置,简单明了。 |
41
wangyzj 2020-04-10 22:16:44 +08:00
.env.example
当然作为小透明 我依然会放入.env |
42
WispZhan 2020-04-10 22:59:05 +08:00
两个角度,结合起来:
1. 看你是什么项目。 团队私有项目,开源项目? …… 2. 看 env 里是啥。build / package 参数, 密钥, 服务器地址? …… 涉及敏感信息的肯定不会直接放进去(脱敏), 否则无妨。 |
43
qiaobeier 2020-04-10 23:04:36 +08:00
肯定不能啊。。。
.env.example + 文档啊。 |
44
zhw2590582 2020-04-10 23:08:59 +08:00
这要看你的.env 有什么信息,没什么重要信息就无所谓啦
|
45
canadahetian 2020-04-10 23:11:09 +08:00
肯定不应该,GIT 就放源码,其他任何东西不要放进去哦.
现在用 docker,基本不用 vevn 了 |
46
yuxing1171 2020-04-11 00:07:10 +08:00
肯定不应该啊
|
47
amosasas 2020-04-11 00:37:33 +08:00
不应该 甚至应该建立一个专门的 secret server 来存放.env 然后分为.env.development .env.test .env.production 这样 然后分权限 跟 CI 环境设置好
|
48
nvkou 2020-04-11 00:54:07 +08:00 via Android
.env 是给你程序用的
你程序会不会泄露我管不着 但你直接敞开大门欢迎来搞就过分了 |
49
mattxlee 2020-04-11 01:42:37 +08:00
我的理解是:分开来的,.local 的都不要放,其它的放,然后在写 env 变量的时候涉及密钥之类的东西都只能放在.local 里
|
50
ljpCN 2020-04-11 02:09:47 +08:00 via Android
比如你 mapbox 的 token,比如你测试环境下的后端域名,要么是要隐蔽,要么是部署时有不同的值,那么就不该推到仓库里。
|
51
buffzty 2020-04-11 02:37:50 +08:00
2 个 env 文件
.env 通用配置 上传到 git .env.local 本地隐私配置 不上传到 git jenkins 里 服务器隐私配置 |
52
sansanhehe 2020-04-11 09:10:04 +08:00
.env
.env.example .env.local .env.dev .env.stg .env.prd |
53
MengiNo 2020-04-11 09:30:58 +08:00 via iPhone
不是涉密问题。 比如你的 env 里有个 app_name 你自己开发写的是 比如 my blog 或者更浮夸的 my secret base 。这个地方搞来搞去人家肯定要改的呀。既然抽象搭配 env 大多都是这种方便改的高度抽象的统一的东西。与其暴露你写的是什么(甚至还要让人猜你这个 my secret base 是意思是什么 这栏应该写什么) 还不如给个 env.example 然后 app_name 那栏写 YOU PROJECT NAME 这样注释性的话语 让他自己 cp 一份改一下。
|
54
jay4497 2020-04-11 14:24:52 +08:00
我理解的,git 仓库里就不应该放那些会因为环境不同而变来变去的东西,.env 就是典型,类似的还有 .idea 、.vscode 等。。。
|
55
starsriver 2020-05-12 08:27:14 +08:00 via Android
.env.example
|