我有api.js加载mock.js或server.js并导出它。结果是,基于服务器环境变量,我可以在后端之间进行交换。
问题,我想在运行时执行此操作,而不会影响已使用" api"的所有代码mock.js和server.js模块。
我希望我的应用根据连接状态使用mock.js或server.js。以下代码仅在初始化期间工作,而不是运行时。
import server from './server'
import mock from './mock'
let backend = null
if (process.env.NODE_ENV === 'development' && Math.random() > 0.5 ) {
backend = mock
} else {
backend = server
}
export default backend
答案 0 :(得分:4)
如果需要,您可以利用ES6实时绑定,例如
import server from './server';
import mock from './mock';
export { backend as default };
let backend = server;
setInterval(() => {
backend = Math.random() > 0.5 ? mock : server;
}, 1000);
将每秒随机更改默认导出。
在ES6中,导入的变量是导出值的模块中变量的实时引用,因此您可以
import backend from "./api";
并且backend
值会随着时间的推移而变化。
特别是在你的情况下,改变
export default backend;
到
export { backend as default};
至关重要,因为第一个不起作用,因为它是
的缩写const uniqueTempVal = backend;
export { uniqueTempVal as default };
您可以看到意味着稍后重新分配backend
不会影响导出值。
答案 1 :(得分:1)
将要导出的对象放在导出对象的属性中:
import server from './server'
import mock from './mock'
let backend = { api: null };
if (process.env.NODE_ENV === 'development' && process.env.NODE_MOCK === true) {
backend.api = mock;
} else {
backend.api = server;
}
export default backend;
现在只需在导入代码中使用api
属性。