reactjs 如何在HTML〈script src="”中引用process.env变量?React

kninwzqo  于 2023-04-20  发布在  React
关注(0)|答案(5)|浏览(335)

我有一个react应用程序,并使用dotenv-webpack来管理我的API密钥。
我已经:-用API密钥创建了一个.env并将其gitignored. - required并将dotenv作为插件添加到webpack.config.js中。
在那之后,我已经能够通过使用process.env.API_key引用.js文件中的一个键了。但是我试图在index.html的script标签中引用它时遇到了问题。
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>

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

<script src="https://maps.googleapis.com/maps/api/js?key=[API_KEY]"></script>

我试过在.js文件中使用反引号,比如${API_KEY},但在.html文件中不起作用。

rseugnpd

rseugnpd1#

如果您已经在使用create-react-app,那么通过更新到

<script src="https://maps.googleapis.com/maps/api/js?key=%REACT_APP_API_KEY%"></script>

就像文档里说的
您还可以访问public/index.html中以REACT_APP_开头的环境变量。

yyhrrdl8

yyhrrdl82#

溶液

不能直接在html中引用process.env变量。
index.html创建您自己的模板,并使用参数替换API url。

HtmlWebpackPlugin

简化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}`,

        });
      ]
    }

template.html

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

<script src="<%= htmlWebpackPlugin.options.apiUrl %>"></script>

请参阅:编写自己的模板

注意事项

这是一个修改后的答案,从这个评论,请阅读完整的对话。

von4xj4u

von4xj4u3#

你可以用简单的方法
在HTML中

<p>%NODE_ENV%</p>

在脚本中

<script>
if('%NODE_ENV%' === 'production') {
.... some code
}
</script>
vddsk6oq

vddsk6oq4#

我把下面的代码放在componentWillMount中,在那里Map渲染和它工作(至少在开发中: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文件。

kuarbcqp

kuarbcqp5#

我一直在寻找如何有条件地设置属性值的问题,几分钟后,我实际上找到了一种处理这种情况的方法,我在下面列出。它由HtmlWebpackPlugin处理。这个片段也将帮助您在HTML文件中引用环境变量。

环境设置

  • 我正在使用Create React App,它在模块中有HtmlWebpackPlugin,在弹出应用程序时将可见。
  • 我的应用程序处于默认状态,即未弹出
    环境变量定义

我在Package.json文件.的scripts属性中设置环境变量[APP_ENV],如下所示

"scripts": {
    "start": "set APP_ENV=development&& react-scripts start",
    "build:prod": "set APP_ENV=production&& react-scripts build",
    "eject": "react-scripts eject"
  }

引用HTML文件变量

<link rel="stylesheet" href="https://<%= process.env.APP_ENV ==='production' ? 'prod.domain': 'dev.domain'%>/main.min.css" />

相关问题