我的应用程序目录结构是:
App
├── client
├── lib
│ ├── _constants.js
│ ├── config
│ └── router
├── modules
│ ├── answers
│ └── questions
├── node_modules
│ └── bcrypt
├── public
│ └── imgs
├── server
│ ├── lib
│ ├── roles
│ └── startup
└── settings-example.json
在我的_constants.js
中,我定义了一些全局变量,例如Schemas = {}
,我打算在modules > module_name> lib > collections.js
或modules > module_name> lib > methods.js
中使用它
但是在模块的collections.js中找不到全局变量
W20160323-21:38:58.977(-7)? (STDERR) ReferenceError: Schemas is not defined
W20160323-21:38:58.977(-7)? (STDERR) at modules/answers/lib/collections.js:22:1
W20160323-21:38:58.977(-7)? (STDERR) at modules/answers/lib/collections.js:89:1
根据我的理解,APP/lib/_constants.js
文件中的全局变量应该在加载更深的modules/module_name/lib/collections.js
之前就已经加载了,对吧?
但这显然没有发生。我做错了什么?
谢谢你的帮助!
阅读结构化应用程序中的"文件加载顺序"部分:
有几种装载顺序规则。它们按顺序应用于应用程序中的所有适用文件,优先级如下:
- HTML模板文件总是先于其他文件加载
- 以main开头的文件。最后加载
- 接下来加载任何lib/目录中的文件
- 下一步加载路径更深的文件
- 然后按整个路径的字母顺序加载文件
按照这种实现方式,嵌套较深的lib
在嵌套较少的lib
之前加载,这解释了您的问题。以下是一些选项:
- 不要在你的深路径中使用
lib
。例如,将路径重命名为modules/questions/stuff/collections.js
- 将模块移动到包中
- 升级至流星1.3(在撰写本文时仍然是预发行版),并开始使用显式的
export
/import
模块语法