#javascript #webpack #api-key #dotenv
Вопрос:
файл .env в корневом каталоге проекта:
ESRI_KEY=api_key_value
Для конфигурации webpack у меня есть:
const webpack = require('webpack');
const Dotenv = require('dotenv-webpack');
module.exports = {
//----//
plugins: [
new Dotenv(),
],
};
и код такой:
console.log(process.env.ESRI_KEY);
const ESRI_KEY = process.env.ESRI_KEY;
const geocodeService = L.esri.Geocoding.geocodeService({
apikey: `{ESRI_KEY}`,
});
Я пробовал разные комбинации прохождения, такие как
apikey: `${ESRI_KEY}`
apikey: ESRI_KEY
и все они работают. Я действительно вижу значение ESRI_KEY в консоли, и я вижу его в папке dist, скрытой на видимом (зависит от синтаксиса передачи). В консоли нет ошибок, но по какой-то причине ничего не происходит, если я не передам прямое значение, например:
const geocodeService = L.esri.Geocoding.geocodeService({
apikey: 'api_key_value',
});
Там просто должно появиться всплывающее окно с адресом места при нажатии (и это работает, если передать прямое значение api_key_ или просто использовать другой файл js со значением и поместить его поверх моего основного js в HTML), но он не работает с .env, и я не могу понять, почему и как это исправить.
В python у меня была только одна подобная проблема с паролем базы данных. Независимо от остальных переменных среды Postgresql принимал только прямое значение пароля в моем main.py. Поэтому я пытаюсь понять, связана ли моя проблема с кодом/webpack/.env или с какими-то конкретными ключами.
Ответ №1:
/* root_project/webpack.config.js */
Поместите файл .env в корневую папку проекта
const DotEnvWebpackPlugin = require('dotenv-webpack');
const DotEnvWebpack = new DotEnvWebpackPlugin({
/**
* systemvars: true
* load all the predefined 'process.env' variables which will
* trump anything local per dotenv specs. (useful for CI purposes)
*/
systemvars: true,
safe: true, // load '.env.example' to verify the '.env' variables are all set.
path: path.join(__dirname, `.env`),
});
а затем в массиве плагинов
...
plugins : [
...,
DotEnvWebpack,
]
а затем вы можете использовать переменные, определенные в файле .env, и все переменные process.env
/* .env */
ESRI_KEY=api_key_value
console.log(process.env.ESRI_KEY);
const ESRI_KEY = process.env.ESRI_KEY;