如何在HTML <script src =""中引用process.env变量?应对

big*_*cup 14 google-maps environment-variables gitignore reactjs webpack

我有一个反应应用程序,并使用dotenv-webpack来管理我的API密钥.

我有: - 使用API​​密钥创建一个.env并对其进行gitignored. - 需要并添加dotenv作为webpack.config.js中的插件.

之后,我已经能够使用process.env.api_key引用.js文件中的一个键.但我在尝试在脚本标记中的index.html中引用它时遇到问题.

index.html的:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/style/style.css">
    <link rel="stylesheet" href="https://cdn.rawgit.com/twbs/bootstrap/48938155eb24b4ccdde09426066869504c6dab3c/dist/css/bootstrap.min.css">
    <script src="https://maps.googleapis.com/maps/api/js?key=process.env.GOOGLEMAP_API_KEY"></script>
  </head>
  <body>
    <div class="container"></div>
  </body>
  <script src="/bundle.js"></script>
</html>
Run Code Online (Sandbox Code Playgroud)

我如何在这里引用process.env.API_key?

<script src="https://maps.googleapis.com/maps/api/js?key=[API_KEY]"></script>
Run Code Online (Sandbox Code Playgroud)

我尝试使用在.js文件中工作的反引号,就像这样${API_KEY},但是在.html文件中不起作用.

btz*_*tzr 11

解决方案

您不能process.env直接在html.

从中创建您自己的模板index.html并将 api url 替换为参数。

HtmlWebpack 插件

简化 HTML 文件的创建以服务您的 webpack 包。

您可以让插件为您生成 HTML 文件,使用 lodash 模板提供您自己的模板或使用您自己的加载器。

webpack.config.js

HtmlWebpackPlugin允许您创建参数并将参数传递给您的模板:

   const api_key = process.env.api_key;
   const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      entry: 'index.js',
      plugins: [
        new HtmlWebpackPlugin({
          inject: false,
          template: './template.html',

          // Pass the full url with the key!
          apiUrl: `https://maps.googleapis.com/maps/api/js?key=${api_key}`,

        });
      ]
    }
Run Code Online (Sandbox Code Playgroud)

模板.html

在模板中,您可以访问参数:

<script src="<%= htmlWebpackPlugin.options.apiUrl %>"></script>
Run Code Online (Sandbox Code Playgroud)

请参阅:编写自己的模板

笔记

这是此评论的修改答案,请阅读完整对话。


tsu*_*suz 11

如果您已经在使用 create-react-app,则可以通过更新到

<script src="https://maps.googleapis.com/maps/api/js?key=%REACT_APP_API_KEY%"></script>
Run Code Online (Sandbox Code Playgroud)

这是记录在这里


Jig*_*ani 6

您可以使用的简单方法

在 HTML 中

<p>%NODE_ENV%</p>
Run Code Online (Sandbox Code Playgroud)

并在脚本中

<script>
if('%NODE_ENV%' === 'production') {
.... some code
}
</script>
Run Code Online (Sandbox Code Playgroud)


小智 2

我将以下代码放在地图渲染的 componentWillMount 中并且它起作用(至少在开发中: const API_KEY = process.env.GOOGLEMAP_API_KEY; const script = document.createElement('script'); script.src = https://maps .googleapis.com/maps/api/js?key= ${API_KEY}; document.head.append(script);

我能够使用 bigmugcup 在上面的评论中发布的代码来使其工作。我没有修改 webpack.config.js 文件。