为什么我不必将 `anti:fake` `import` 到我的 Meteor 源文件中?

Why don't I have to `import` `anti:fake` into my Meteor source files?

我看到了一些与此类似的问题,但 none 似乎适用于我的情况。

我正在创建一个 Meteor 项目并使用 Atmosphere 包 'anti:fake' 生成测试数据。

对于任何其他包,我必须 import 它。就连Meteor本身,我也要做import {Meteor} from 'meteor/meteor';。对于其他类似的 Atmosphere 包,例如 publish-counts 我也必须写一行 import {Counts} from 'meteor/tmeasday:publish-counts';。 ...此外,即使我想导入 anti:fake,我也看不到可以正常工作的导入名称。它们在 packages 文件中以相同的方式列出,并以相同的方式添加到我的项目中,因此从表面上看,它们看起来都一样。

None 这真的很重要,因为我可以神奇地使用一个名为 Fake 的对象,但我真的不明白为什么会这样,以及我将来如何知道我需要显式导入的内容和隐式导入的内容。

谢谢!

Meteor 1.3 引入了 ES2015 模块,但是为了保持向后兼容性,Meteor 仍然保留了 "eager loading" 为您导入 anti:fake 包的行为,将其绑定到全局变量 Fake .

出于同样的原因,

import {Meteor} from 'meteor/meteor' 实际上并不是必需的,但强烈建议将其作为最佳实践(如果未来的版本通过删除预先加载来降低这种向后兼容性,则可能变得必要)。

如果您寻找针对 Meteor 1.3 或更高版本的较新教程,您会看到大部分代码都放在 /imports 目录中,因为 Meteor 构建工具对此的处理方式不同,所有代码都在它不是 'eagerly loaded'。此目录中的所有代码都必须显式导入,连同模块命名空间和避免旧的文件加载顺序问题,让您更清楚地了解应用程序中的代码 运行(更少魔法!)。

Meteor 1.3 还包括对 NPM 包的支持,它们为您提供了使用大气包的替代方法,并且以这种方式包含的包也需要明确导入到您的应用程序中。

您可以考虑使用 https://www.npmjs.com/package/faker

但是,如果某些东西对您有用,您就不必觉得必须进行更改,但希望这可以帮助您理解它为什么起作用!

您确定publish-counts需要导入语句吗?查看此包的 package.js 会显示这两行

  api.export('Counts');
  api.export('publishCount', 'server');

这使得 publishCount 对象在导入此包的应用程序(或包)中的服务器上可用,并且 Counts 对象在客户端和服务器上都可用。不需要导入语句(因为它们被放置在全局命名空间中)

有关详细信息,请参阅 Migrating to Meteor 1.3 文档