V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ethusdt
0.01D
V2EX  ›  程序员

.env 应不应该放到 git 中?

  •  
  •   ethusdt ·
    FaiChou · Apr 10, 2020 · 9808 views
    This topic created in 2214 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
        1
    R18  
       Apr 10, 2020
    .env 是一个配置文件,里面可能会有用户的私人配置,密钥之类的东西。通俗做法是 写一个 env 文件来进行通用配置,用户 copy 后自由发挥
    Vegetable
        2
    Vegetable  
       Apr 10, 2020
    说两个我想到的点

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

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

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

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

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


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

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

    DB_PASSWORD = ${your_password}

    然后 .env 加入 .gitignore

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

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