Одна ошибка, которую я вижу здесь, заключается в том, что вы создаете проект вне докера и помещаете артефакты (после сборки) в докер для обслуживания веб-приложения.
Согласно документации DefinePlugin
https://webpack.js.org/plugins/define-plugin/
DefinePlugin позволяет создавать глобальные константы, которые можно настроить во время компиляции
Это означает, что если у вас есть компонент App.js
, как показано ниже
import React from 'react';
function App() {
return (
<div>
<p>[process.env.test] = {process.env.test}</p>
<p>[process.env.NODE_ENV] = {process.env.NODE_ENV}</p>
</div>
);
}
export default App;
И конфигурация веб-пакета
new webpack.DefinePlugin({"process.env.test": JSON.stringify(process.env.test)})
После запуска NODE_ENV=production test="A test variable" npm run build
(который запускается изнутри webpack --mode production
, если он загружается с помощью create-реакции-приложения)
Компонент компилируется в(Вставлены только соответствующие части скомпилированного кода веб-пакета).
var i = function() {
return a.a.createElement(
"div",
null,
a.a.createElement(
"p",
null,
"[process.env.test] = ",
"A test variable"
),
a.a.createElement(
"p",
null,
"[process.env.NODE_ENV] = ",
"production"
)
);
}
Здесь он заменил {process.env.test}
и {process.env.NODE_ENV}
на A test variable
и production
во время компиляции .
Установка каких-либо переменных среды на сервере после сборки не влияет на скомпилированный файл .
И из-за прямого внедрения переменных env в скомпилированный код выне следует использовать это для хранения конфиденциальнойинформация (секреты / личные токены, пароли, IP-адреса внутренних серверов и т. д.).
Таким образом, решение вашей первоначальной проблемы может заключаться в создании артефактов внутри контейнера Docker. Ниже приведен пример файла Docker.
FROM node:10 as react-app
# Create app directory
WORKDIR /usr/src/app
# Set a temporary variable
ENV test="Hello Docker"
COPY . .
RUN npm install
RUN npm run build
FROM nginx:1.12-alpine
COPY --from=react-app /usr/src/app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Пример репозитория git, если вам нужна ссылка.
https://github.com/nithinthampi/test-defineplugin.