如何在模块化项目中实现全局传递的数据对象

方案

由于export输出的接口与其对应的值是动态绑定关系,即通过该接口可以设置/获取模块内部实时的值,因此只需要直接使用模块导出一个对象即可,如下:

1
2
3
4
5
6
7
8
9
10
11
let data = {
relationships: [],
nodes: [],
nodeMap: {},
options: {},
focusNodeId: null
}

export {
data
}

然后在需要用到这些数据的模块中引入:

1
import { data } from './data';

注意别忘了大括号。

不要使用export default

因为如果使用export default,类似这样:

1
2
3
4
5
6
7
export default {
relationships : [],
nodes: [],
nodeMap: {},
options: {},
focusNodeId: null
}

由于该模块只对外暴露了default对象,那么在使用的地方,一旦你涉及修改这些属性的值,webpack就会报类似下面这样的黄色警告:

警告

另外这样写,在打包压缩之后,会出现一个问题,就是无法修改这些属性的值。将import的该模块在控制台打印输出,可以看到只暴露了一个default对象的getter方法,没有default对象的setter方法,更没有其他属性的setter方法,自然无法修改属性了。