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

时间:2016-09-20 21:31:10

标签: javascript meteor typescript import atmosphere.js

我已经看到了一些类似的问题,但似乎没有一个适用于我的情况。

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

Meteor 1.3推出了ES2015模块,但是为了保持向后兼容性,Meteor仍然保留着“热切”的负载。导入anti:fake包的行为,将其绑定到全局变量Fake

出于同样的原因,

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

如果您寻找针对Meteor 1.3或更新版本的较新教程,您将看到大多数代码都放在/imports目录中,因为Meteor构建工具对此进行了不同的处理,其中的所有代码均为不要急于加载#39;必须显式导入此目录中的所有代码,这些代码与模块命名空间一起避免旧的文件加载顺序问题,使您更清楚地了解应用程序中运行的代码(不那么神奇!)。

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

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

但是,如果某些内容对您有用,请不要改变,但希望这有助于您了解它的工作原理!

您确定publish-counts是否需要import语句?查看此包的package.js显示了这两行

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

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

有关详情,请参阅Migrating to Meteor 1.3 doc