我不确定我做错了什么。console.log打印undefined。Makefile、config.env、webpack.config.js和package.json都位于项目的根目录中。
Makefile:
docker-run: docker
docker run -it --env-file config.env -p "80:80" appconfig.env
API_KEY=https://test.comwebpack.config.js
plugins: [
new webpack.DefinePlugin({
BASE_URL: JSON.stringify('https://myapp.firebaseio.com'),
'process.env.API_KEY': JSON.stringify(process.env.API_KEY)
})
]App.js
const App = () => {
useEffect(() => {
console.log(process.env.API_KEY);//undefined
console.log(process.env.BASE_URL);//undefined
console.log(BASE_URL);//undefined
}, []);
return (
<></>
);
};Package.json(npm run docker)
"scripts": {
"start": "rm -rf dist && webpack-dev-server --mode development --open --hot --port 8090",
"docker": "rm -rf dist && webpack --mode production && make docker-run"
},发布于 2019-10-21 22:29:48
我在这里看到的一个错误是,您在docker之外构建项目,并将工件(在构建之后)推送到docker以服务于webapp。
根据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;和webpack的配置
new webpack.DefinePlugin({"process.env.test": JSON.stringify(process.env.test)})在运行NODE_ENV=production test="A test variable" npm run build之后(如果使用create-react-app启动,它会在内部运行webpack --mode production )
该组件被编译为(仅粘贴了webpack编译代码的相关部分)。
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 。
构建后在服务器上设置任何环境变量的都不会影响编译后的文件。
,并且由于在编译代码中直接注入环境变量,您不应该使用它来存储机密信息(秘密/私有令牌、密码、内部服务器的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 repo。
https://stackoverflow.com/questions/58484614
复制相似问题