我在这个回购中构建了一个基于初学者工具包的同构反应应用程序。它使用webpack来构建生产代码。
问题是,我需要将服务器上的几个环境变量的值公开给浏览器中的客户端代码,而无需重新生成生成代码。我希望能够更改env的值,并使它与客户端在下一页刷新时的效果相同,而无需重新构建任何内容。我不想为了做这件事而把测试复杂化。
我找到了一些解决方案,其中没有一个是很好的:
这些方法的问题:
我过去做过第2和第3课,但在智力上从来没有对这些解决方案感到满意。
有什么建议吗?看来这应该是一个常见的/解决的问题。也许我只是想得太多了,第三条路要走了。
发布于 2017-01-20 00:58:46
这使用window中的一个窗口全局变量来传递值,但是给您一个通用的接口来访问浏览器和节点上的值。
在publicEnv.js中
// Env variable to push to the client. Careful on what you put here!
const publicEnv = [
'API_URL',
'FACEBOOK_APP_ID',
'GA_ID'
];
// These 2 lines make sure we pick the value in the right place on node and the browser
const isBrowser = typeof window !== 'undefined';
const base = (isBrowser ? window.__ENV__ : process.env) || {};
const env = {};
for (const v of publicEnv) {
env[v] = base[v];
}
export default env;在页面的HTML模板文件中,我有:
import publicEnv from 'publicEnv.js';
...
<script>
window.__ENV__ = ${stringify(publicEnv)};
// Other things you need here...
window.__INITIAL_STATE__ = ${stringify(initialState)};
</script>因此,现在我可以在前端和后端获得env变量的值:
import publicEnv from 'publicEnv.js';
...
console.log("Google Analytic code is", publicEnv.GA_ID);希望能帮上忙。
https://stackoverflow.com/questions/32773850
复制相似问题