Meteor:全局常量未从app/lib/_constants.js中获取

Meteor: Global constant not getting picked up from app/lib/_constants.js

本文关键字:lib constants js 获取 app 全局 常量 Meteor      更新时间:2023-09-26

我的应用程序目录结构是:

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.jsmodules > 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之前就已经加载了,对吧?

但这显然没有发生。我做错了什么?

谢谢你的帮助!

阅读结构化应用程序中的"文件加载顺序"部分:

有几种装载顺序规则。它们按顺序应用于应用程序中的所有适用文件,优先级如下:

  1. HTML模板文件总是先于其他文件加载
  2. 以main开头的文件。最后加载
  3. 接下来加载任何lib/目录中的文件
  4. 下一步加载路径更深的文件
  5. 然后按整个路径的字母顺序加载文件

按照这种实现方式,嵌套较深的lib在嵌套较少的lib之前加载,这解释了您的问题。以下是一些选项:

  1. 不要在你的深路径中使用lib。例如,将路径重命名为modules/questions/stuff/collections.js
  2. 将模块移动到包中
  3. 升级至流星1.3(在撰写本文时仍然是预发行版),并开始使用显式的export/import模块语法