反応アプリがあり、dotenv-webpackを使用してAPIキーを管理しています。
私が持っている:-APIキーを使用して.envを作成し、それを無視しました。 -webpack.config.jsのプラグインとしてdotenvが必要および追加されました。
その後、process.env.api_keyを使用して.jsファイル内のキーの1つを参照することができました。しかし、scriptタグの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>
ここでprocess.env.API_keyを参照するにはどうすればよいですか?
<script src="https://maps.googleapis.com/maps/api/js?key=[API_KEY]"></script>
${API_KEY}
のように、.jsファイルで機能する逆引用符を使用しようとしましたが、.htmlファイルでは機能しません。
マップがレンダリングされて機能する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ファイルは変更しませんでした。
既にcreate-react-appを使用している場合、これは、
<script src="https://maps.googleapis.com/maps/api/js?key=%REACT_APP_API_KEY%"></script>
これは文書化されています ここ
html
内でprocess.env
変数を直接参照することはできません。
index.html
から独自のテンプレートを作成し、api urlをパラメーターに置き換えます。
Webpackバンドルを提供するHTMLファイルの作成を簡素化します。
プラグインにHTMLファイルを生成させるか、lodashテンプレートを使用して独自のテンプレートを提供するか、独自のローダーを使用することができます。
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}`,
});
]
}
テンプレート内では、パラメーターにアクセスできます。
<script src="<%= htmlWebpackPlugin.options.apiUrl %>"></script>
参照: 独自のテンプレートの作成
これはこれから修正された答えです コメント 、会話全体を読んでください。