在持续集成后,在生产服务器中使用Webpack处理环境变量的两种方法
Two ways to Handle Environment Variables with Webpack in production server after a continuous integration
我们正在尝试使用Webpack作为构建工具在生产环境中运行一个ReactJs。为此,我们使用DefinePlugin来设置环境变量。
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('development'),
'process.env.API_URL': JSON.stringify("http://localhost:7852/"),
}),
然而,出于安全原因,我不想在我的源代码中有合理的信息,例如,我们不想在webpack配置中放置api密钥或私有url。因此,我们计划将这些值存储在生产服务器的环境变量中。
我们在持续集成服务器(Docker Hub)中构建Webpack。我们希望在Docker服务器中进行编译,但我们不想把设置放在Docker服务器中,我们只想把设置放在生产服务器中。然而,当我们在生产服务器中设置这些值时,结果是undefined
。是否有一种方法可以将Webpack中的一些配置变量设置为在编译期间处理(有几种方法),并让生产服务器处理其他配置变量?任何建议吗?提前感谢。 我刚刚遇到了完全相同的问题。我发现,在webpack运行的时候,需要设置环境以便应用程序可见。这意味着只有你的CI服务器(它会构建docker镜像)上的东西才能被webpack和你的应用程序使用。
除非你的应用程序路由请求通过它的服务器,那里的环境是可用的,到api服务器,我想不出一个体面的解决方案。我选择做的是在我的TeamCity构建期间设置环境,并为每个测试和生产服务器创建单独的docker映像,但使用相同的dockerfile。
您可以针对不同的环境使用不同的webpack,并将敏感配置移到环境变量中。你的应用程序只能看到容器中的环境变量,如果它们在Dockerfile中使用ENV
定义。如果你改变你的应用程序从环境变量中读取所有敏感信息,并且在你的Dockerfile中有匹配的ENV
指令,你可以在启动容器时指定它们。
。在webpack:
new webpack.DefinePlugin({
'process.env.API_KEY': JSON.stringify(process.env.API_KEY || 'API_KEY environment variable not defined'),
...
在你的Dockerfile中添加ENV API_KEY
,当你运行你的容器时,你可以通过-e
: docker run -e API_KEY=ba3d4db...
传递环境变量。
更好的是,如果你有多个敏感值,在Dockerfile中定义它们,并在运行时使用--env-file
将它们传递到环境文件中:
> cat Dockerfile
FROM ubuntu
ENV API_KEY '
ANOTHER_SECRET
> cat env.file
API_KEY=ab3da3bda4d4a4c4c4
ANOTHER_SECRET=shhh!
> docker run --env-file env.file -it temp bash
root@545d5945ab1b:/# echo $API_KEY
ab3da3bda4d4a4c4c4
root@545d5945ab1b:/# echo $ANOTHER_SECRET
shhh!
那么你可以在每个环境中使用相同的Docker配置,在env.file
中使用不同的内容,并且可以安全访问文件。
- 可以't让我的if语句处理js中的html表单输入
- 如何使用url加载程序在webpack中导入多个图像
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- Webpack开发服务器和React服务器端渲染
- 提示使用服务器端事件处理程序激活JavaScript
- 如何使用webpack处理仅在运行时可用的服务器端依赖关系
- Webpack错误:“您可能需要一个适当的加载程序来处理此文件类型”
- Webpack:您可能需要一个适当的加载程序来处理此文件类型
- 如何处理 $(document).foundation() 调用和 WebPack
- 使用webpack处理具有外部依赖关系的AMD库
- 使用Mocha测试时处理WebPack CSS导入
- 如何在webpack服务器端处理静态资源
- 我可以检测我的脚本是否正在被Webpack处理
- 在持续集成后,在生产服务器中使用Webpack处理环境变量的两种方法
- Webpack可以'即使使用合适的装载机,也无法处理JSX
- 通过webpack中的jQuery触发事件,并在页面上处理
- 处理与 WebPack 串联有关的文件顺序