Webpack 捆绑动态客户端配置
Webpack bundle dynamic client config
我们有一个 node.js 应用程序捆绑用于使用 Webpack 的生产。
我们的问题是如何在已经有一个捆绑包后添加动态配置,而不需要重新捆绑?
在服务器端,我们可以只使用节点环境变量,但是如何为客户端包做到这一点呢?具体来说,我们需要告诉浏览器模块要连接到哪个 api 服务器地址。
拥有一个包含配置的 js/json 文件会导致配置值被注入到包中,因此之后无法更改(以一种舒适的方式,无需打开包文件并手动查找和替换)。
使用像 express-expose 这样的东西不是我们想要的,因为它会导致另一个网络请求获取数据,而我们的服务器地址是动态的。
node-config 等,不适用于客户端
您可以创造性地使用 externals
选项:
externals: [
{ appConfig: 'var appConfig' },
],
如果你把它添加到你的配置中,你可以让你的网络服务器在加载你的 webpack 包之前的某个地方添加一个带有 var appConfig = {"config":"value"};
的脚本标签,一个简单的 require('appConfig')
就会把它捡起来.
我们有一个 node.js 应用程序捆绑用于使用 Webpack 的生产。
我们的问题是如何在已经有一个捆绑包后添加动态配置,而不需要重新捆绑?
在服务器端,我们可以只使用节点环境变量,但是如何为客户端包做到这一点呢?具体来说,我们需要告诉浏览器模块要连接到哪个 api 服务器地址。
拥有一个包含配置的 js/json 文件会导致配置值被注入到包中,因此之后无法更改(以一种舒适的方式,无需打开包文件并手动查找和替换)。
使用像 express-expose 这样的东西不是我们想要的,因为它会导致另一个网络请求获取数据,而我们的服务器地址是动态的。
node-config 等,不适用于客户端
您可以创造性地使用 externals
选项:
externals: [
{ appConfig: 'var appConfig' },
],
如果你把它添加到你的配置中,你可以让你的网络服务器在加载你的 webpack 包之前的某个地方添加一个带有 var appConfig = {"config":"value"};
的脚本标签,一个简单的 require('appConfig')
就会把它捡起来.