流星:全局常量没有从app / lib / _constants.js中获取

时间:2016-03-24 04:52:17

标签: javascript meteor simple-schema

我的app目录结构是:

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之前加载,对吗?

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Structuring your application

中读取“文件加载顺序”部分
  

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

     
      
  1. HTML模板文件总是在其他所有内容之前加载
  2.   
  3. 以main开头的文件。最后加载
  4.   
  5. 下一个
  6. 加载任何lib /目录中的文件   
  7. 接下来加载具有更深路径的文件
  8.   
  9. 然后按整个路径的字母顺序加载文件
  10.   

实现此方法时,深层嵌套lib之前加载嵌套lib,这解释了您的问题。以下是一些选项:

  1. 请勿在深层路径中使用lib。例如。将路径重命名为modules/questions/stuff/collections.js
  2. 将模块移到包中。
  3. 升级到meteor 1.3(截至本文撰写时仍未发布)并开始使用明确的export / import模块语法。