【问题标题】:How do I set environmental variables in my client-side code?如何在客户端代码中设置环境变量?
【发布时间】:2012-07-28 00:19:05
【问题描述】:

我需要根据我们是处于开发阶段还是生产阶段来设置不同的密钥。在没有固有运行时环境的客户端中执行此操作的好方法是什么?

谢谢!

【问题讨论】:

  • 您考虑过使用构建脚本吗?当您最小化您的代码时,您还可以将变量值从开发交换到生产。
  • “没有固有的运行时环境”是指它可能在解释器外壳中执行而不是部署在网站上吗?
  • @ChristoferEliasson 我认为这可能是最好的路线,感谢您的建议。
  • 在客户端你有一个“窗口”对象...也许你可以关闭它(?)

标签: javascript html node.js


【解决方案1】:

为什么不直接加载不同的脚本呢?您可以根据 GET 参数动态创建脚本,例如http://example.org/script.js?development=1,然后使用 PHP 等服务器端语言根据该参数更改代码内容。

您还可以在您的网络服务器上使用重写规则以使其看起来更干净。

【讨论】:

    【解决方案2】:

    一种方法是将环境变量从服务器注入到客户端的全局命名空间中。

    例如,如果您在 PHP 中执行此操作:

    <script>
        var env = <?php echo $your_env_variable; ?>; // globally accessible variable
    </script>
    

    现在您可以从在该脚本标记之后执行的任何 javascript 文件中访问该环境变量。

    在节点中你会做同样的事情,但使用模板(例如 Jade):

    script(type='text/javascript').
        var env = passedInEnvVar
    

    【讨论】:

      【解决方案3】:

      在 nodejs 中,指定环境的“官方”方式是使用“NODE_ENV”。由于您没有提及您用于提供 HTML 内容的框架,因此我将使用 expressjs 作为答案。

      您可以在视图模板中简单地执行此操作(我使用的是 EJS)

        var key = '<%= keys[process.env.NODE_ENV] %>'
      

      你需要准备一组对应每个环境的键

      var keys = {
        'development': 'dev-key',
        'production': 'prod-key'
      }
      

      【讨论】:

        【解决方案4】:

        页面头部的&lt;meta name='environment' content='&lt;%= yourVariable %&gt;' /&gt; 非常适合(ejs 示例,但你明白了)。

        此方法将帮助您保持更严格的 Content-Security-Policy(无 inline-script),并且您无需在服务器中添加路由即可获得所需的值。

        【讨论】:

          猜你喜欢
          • 2021-09-03
          • 1970-01-01
          • 1970-01-01
          • 2016-04-28
          • 2018-08-01
          • 1970-01-01
          • 2020-11-04
          • 2022-11-20
          • 1970-01-01
          相关资源
          最近更新 更多