0

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

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.jsormodules > 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了,对吧?

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

谢谢你的帮助!

4

1 回答 1

1

阅读Structuring your application中的“文件加载顺序”部分:

有几个负载排序规则。它们按以下优先级顺序应用于应用程序中的所有适用文件:

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

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

  1. 不要lib在你的深层路径中使用。例如,将路径重命名为modules/questions/stuff/collections.js.
  2. 将您的模块移动到包中。
  3. 升级到流星 1.3(在撰写本文时仍是预发布版本)并开始使用显式export/import模块语法。
于 2016-03-24T05:08:59.847 回答