• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ethusdt
0.01D
V2EX  ›  程序员

.env 应不应该放到 git 中?

  •  
  •   ethusdt · Apr 10, 2020 · 10586 views
    This topic created in 2400 days ago, the information mentioned may be changed or developed.

    Gatsby.js Link

    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 中,即使是一个开源项目。

    Supplement 1  ·  Apr 10, 2020
    讨论前端下的 .env.*
    55 replies  •  2020-05-12 08:27:14 +08:00
    R18
    R18
    Apr 10, 2020
    1
    .env 是一个配置文件,里面可能会有用户的私人配置,密钥之类的东西。通俗做法是 写一个 env 文件来进行通用配置,用户 copy 后自由发挥
    Vegetable
    Vegetable
    Apr 10, 2020
    2
    说两个我想到的点

    我曾经因为一个 react-native 项目的.env 文件包含了别人的 JavaHome 还是 AndroidHome 变量,耽误了不少时间.
    有一些密码会通过环境变量保存, 上传到仓库并不安全
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    3
    @Vegetable #2 「有一些密码会通过环境变量保存, 上传到仓库并不安全」.env 本身就不应该放密码等信息,所以两码事。
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    4
    @Vegetable #2 我明白你的意思了,有些小白用户会错误的将密码放到 .env 来管理,所以还是建议大家 .env 不要托管到 git 中。是吧
    tabris17
    tabris17
    Apr 10, 2020
    5
    你想和大家分享你的密码?
    jarontai
    jarontai
    Apr 10, 2020 via iPhone❤️3
    6
    .env 文件本身肯定不入 git 啊,入 git 的应该是一个模版比如:.env.example,其中添加配置示例和注释,给用户拷贝然后进行配置
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    7
    @tabris17 #5 有什么密码需要放到 .env 中?放到 .env 中就代表你要用这个变量,最终 webpack 打包工具会将 .env 中的值赋给项目代码引用的地方,对前端来说,代码是 public 的,任何人都可以看到「密码」。
    int64ago
    int64ago
    Apr 10, 2020❤️1
    8
    int64ago
    int64ago
    Apr 10, 2020
    9
    不要说我什么不打码……这些人既然公开了这些就不值得同情
    koolob
    koolob
    Apr 10, 2020
    10
    实际用到的.env 不要传,可以传的是.env 文件的模版。
    另外可以加一个脚本,通过参数来生成.env 文件。

    其实这是 git 上到底应该放什么不放什么的问题。
    我觉得凡是跟运行环境有关的个性化的东西,就都不要传 git 。比如本地目录路径、本地测试用的账号密码什么的。
    Raincal
    Raincal
    Apr 10, 2020 via Android
    11
    有些变量只在构建阶段会用到,并不能在构建后的代码中看到
    skys215
    skys215
    Apr 10, 2020
    12
    知道为什么叫.env 吗? env 就是 environment 的缩写,就是说,这个文件里的值是只针对当前环境的,因此.env 不应该跟着传上去。如果想统一管理配置,那有对应的软件可以支持。好像叫 zookeeper 什么的。
    b821025551b
    b821025551b
    Apr 10, 2020❤️1
    13
    你的眼光不应该只局限于前端范围,后端也同样要用到.env 之类的,里面是放了各种服务的 key
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    14
    @int64ago #8 我觉得这位用户的项目开源出来就是个错误。。发现刚刚开源的 ~ 正如 4L 提到的,小白用户错误的将 .env 中贴了密码等信息。即使不放 .env 中,程序中也能找到,再不济抓个包也能看到吧。
    ngrok111
    ngrok111
    Apr 10, 2020
    15
    影响不大的可以写入
    env_example
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    16
    @b821025551b #13 哦哦,谢谢提醒,我没有接触过后端。我 append 下前提概要。
    iyear
    iyear
    Apr 10, 2020
    17
    gitignore 加*.env ,自己的配置就用这个后缀
    再新建一个配置模板文件.env.example
    README 让用户下载模板自己改
    tabris17
    tabris17
    Apr 10, 2020
    18
    @FaiChou 很难跟前端解释这个问题
    dtsdao
    dtsdao
    Apr 10, 2020
    19
    前端的 .env 可以放后端地址啊,你不可能直接拿生产服务器测试吧?这个东西配置的时候在开发文档里说明一下就是了
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    20
    @dtsdao #19 开源项目,没有什么生产 /测试服务器地址吧。 平时的业务项目,.env 放 git 里,也没毛病吧
    U7Q5tLAex2FI0o0g
    U7Q5tLAex2FI0o0g
    Apr 10, 2020❤️2
    21
    不应该传.env
    要传.env.example
    然后 example 里注意不要写正式的,用通用字符代替,比如
    password=YOUR_PASSWORD (而不是 123abc )
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    22
    @tabris17 #18 嗯,后端的就涉及 private_key 了,相对来说,前端用的都是些 public_key 。所以前端 public_key 也无所谓被 public 出去。
    momocraft
    momocraft
    Apr 10, 2020
    23
    想做就做吧 我看别人花时间说服你也挺累的
    自己的东西自己负责而已
    ethusdt
    ethusdt
    OP
    Apr 10, 2020
    24
    @momocraft #23 当然不可能这么做 ^_^,也不需要被说服。 想了解下前端 .env 放 ignore 中的其他理由。
    offline
    offline
    Apr 10, 2020
    25
    .env.example 放注释

    .env.default 放默认,这个应
    offline
    offline
    Apr 10, 2020
    26
    .env.example 放实例

    下面两个都应该忽略
    .env.default 放默认,这个应该在自己的服务器上生成,不提交 git
    .env 放本地私有
    hfpp2012
    hfpp2012
    Apr 10, 2020
    27
    肯定不放 git 中呀
    kasper4649
    kasper4649
    Apr 10, 2020❤️2
    28
    [x] .env
    [✓] .env.example
    ben1024
    ben1024
    Apr 10, 2020
    29
    不放 .env, 进行线上编译才是正确
    BenX
    BenX
    Apr 10, 2020
    30
    最佳实践来看,可以放一个样板同步上到 repo,例如 .env.example
    同步还要在 readme 中描述解释清楚里面需要有哪些变量。

    自己本地的 .env 就不要放到 repo


    PS,遇到过啃爹的一个项目就是 .env 没放,readme 也不说和写有哪些变量。
    要跑起来要不能抓到人,要不就只有自己看代码找去了
    xAI
    xAI
    Apr 10, 2020
    31
    .env.example 需要
    redam
    redam
    Apr 10, 2020
    32
    前端可以有.env.local,local 的就 ignore
    polun
    polun
    Apr 10, 2020
    33
    如果放 git 里,就不需要 .env 了,直接静态变量不更好吗。
    ratatata
    ratatata
    Apr 10, 2020
    34
    .env 不能放,但是应该放一个 .env.example,列出需要配置的变量
    MeteorCat
    MeteorCat
    Apr 10, 2020 via Android
    35
    example.env ,之后忽略文件.env
    Chingim
    Chingim
    Apr 10, 2020 via Android
    36
    不要教条主义,含敏感信息的就不要放,不含的无所谓,含有构建项目需要的信息(比如各种环境下的 API 地址)那就必须放到项目里
    Chingim
    Chingim
    Apr 10, 2020 via Android
    37
    因为不同的项目从 env 文件中读取的信息都不一样,何必纠结。
    Kobayashi
    Kobayashi
    Apr 10, 2020 via Android
    38
    不放。会放一个模板 .env.example
    msg7086
    msg7086
    Apr 10, 2020❤️1
    39
    .env 从名字上来说就是对每个环境的分别配置。
    既然是对每个环境有效,当然不应该放在「对所有环境有效」的 Git 中。
    这和前端后端没有关系,这是.env 本身的身份决定的。
    是否 Public 和是否包含.env 没有直接关系。你源代码都是 Public 的,为什么变量不放在源码的配置文件里?
    RRRSSS
    RRRSSS
    Apr 10, 2020
    40
    一般开源项目里都这么干:

    .env.simple 文件放 git,然后里面用变量表示,比如:

    DB_PASSWORD = ${your_password}

    然后 .env 加入 .gitignore

    最后 README 里加上,要用户 `cp .env.simple .env`,这样可以控制每个人是不同的配置,简单明了。
    wangyzj
    wangyzj
    Apr 10, 2020
    41
    .env.example
    当然作为小透明
    我依然会放入.env
    WispZhan
    WispZhan
    Apr 10, 2020
    42
    两个角度,结合起来:
    1. 看你是什么项目。 团队私有项目,开源项目? ……
    2. 看 env 里是啥。build / package 参数, 密钥, 服务器地址? ……

    涉及敏感信息的肯定不会直接放进去(脱敏), 否则无妨。
    qiaobeier
    qiaobeier
    Apr 10, 2020
    43
    肯定不能啊。。。
    .env.example + 文档啊。
    zhw2590582
    zhw2590582
    Apr 10, 2020
    44
    这要看你的.env 有什么信息,没什么重要信息就无所谓啦
    canadahetian
    canadahetian
    Apr 10, 2020
    45
    肯定不应该,GIT 就放源码,其他任何东西不要放进去哦.
    现在用 docker,基本不用 vevn 了
    yuxing1171
    yuxing1171
    Apr 11, 2020
    46
    肯定不应该啊
    amosasas
    amosasas
    Apr 11, 2020
    47
    不应该 甚至应该建立一个专门的 secret server 来存放.env 然后分为.env.development .env.test .env.production 这样 然后分权限 跟 CI 环境设置好
    nvkou
    nvkou
    Apr 11, 2020 via Android
    48
    .env 是给你程序用的
    你程序会不会泄露我管不着
    但你直接敞开大门欢迎来搞就过分了
    sirenserenity
    sirenserenity
    Apr 11, 2020
    49
    我的理解是:分开来的,.local 的都不要放,其它的放,然后在写 env 变量的时候涉及密钥之类的东西都只能放在.local 里
    ljpCN
    ljpCN
    Apr 11, 2020 via Android
    50
    比如你 mapbox 的 token,比如你测试环境下的后端域名,要么是要隐蔽,要么是部署时有不同的值,那么就不该推到仓库里。
    buffzty
    buffzty
    Apr 11, 2020
    51
    2 个 env 文件
    .env 通用配置 上传到 git
    .env.local 本地隐私配置 不上传到 git
    jenkins 里 服务器隐私配置
    sansanhehe
    sansanhehe
    Apr 11, 2020
    52
    .env
    .env.example
    .env.local
    .env.dev
    .env.stg
    .env.prd
    lkxjlkejwr
    lkxjlkejwr
    Apr 11, 2020 via iPhone
    53
    不是涉密问题。 比如你的 env 里有个 app_name 你自己开发写的是 比如 my blog 或者更浮夸的 my secret base 。这个地方搞来搞去人家肯定要改的呀。既然抽象搭配 env 大多都是这种方便改的高度抽象的统一的东西。与其暴露你写的是什么(甚至还要让人猜你这个 my secret base 是意思是什么 这栏应该写什么) 还不如给个 env.example 然后 app_name 那栏写 YOU PROJECT NAME 这样注释性的话语 让他自己 cp 一份改一下。
    jay4497
    jay4497
    Apr 11, 2020
    54
    我理解的,git 仓库里就不应该放那些会因为环境不同而变来变去的东西,.env 就是典型,类似的还有 .idea 、.vscode 等。。。
    starsriver
    starsriver
    May 12, 2020 via Android
    55
    .env.example
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1257 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 161ms · UTC 20:03 · PVG 04:03 · LAX 12:03 · JFK 15:03
    ♥ Do have faith in what you're doing.