使用 Atmosphere 包
搜索包
有几种方法可以搜索发布到 Atmosphere 的 Meteor 包
- 在 Atmosphere 网站 上搜索。
- 从命令行使用
meteor search
。 - 使用社区包搜索网站,例如 Fastosphere。
主要的 Atmosphere 网站提供了其他整理功能,例如趋势包、包星级和标记,但是如果您尝试查找特定包,则其他一些选项可能会更快。例如,您可以从命令行使用 meteor show ostrio:flow-router-extra
来查看该包的描述和不同的可用版本。
包命名
您可能会注意到,除了 Meteor 平台包之外,Atmosphere 上的所有包都具有 prefix:package-name
形式的名称。前缀是发布该包的组织或用户的 Meteor 开发者用户名。Meteor 使用这种包命名约定来确保明确谁发布了某个特定包,并避免临时命名空间约定。Meteor 平台包没有任何 prefix:
。
安装 Atmosphere 包
要安装 Atmosphere 包,请运行 meteor add
meteor add ostrio:flow-router-extra
这将添加与应用程序中其他包兼容的所需包的最新版本。如果您想指定特定版本,可以通过向包名称添加后缀来指定,例如:meteor add ostrio:[email protected]
。
无论您如何将包添加到应用程序,其实际版本都将在 .meteor/versions
文件中跟踪。这意味着与您在同一应用程序上协作的任何人都保证拥有与您相同的包版本。如果您想在安装后更新到包的更新版本,请使用 meteor update
。您可以运行没有任何参数的 meteor update
来将所有包和 Meteor 本身更新到最新版本,或者传递特定包以仅更新该包,例如 meteor update ostrio:flow-router-extra
。
如果您的应用程序在您添加新包时正在运行,Meteor 将自动下载它并为您重新启动应用程序。
给定版本的 Atmosphere 包的实际文件存储在您本地的
~/.meteor/packages
目录中。
要查看所有已安装的 Atmosphere 包,请运行
meteor list
要删除不需要的 Atmosphere 包,请运行
meteor remove ostrio:flow-router-extra
您可以在 Meteor 命令行文档 中获取有关所有包命令的更多详细信息。
使用 Atmosphere 包
要在应用程序中使用 Atmosphere 包,您可以使用 meteor/
前缀导入它
import { Mongo } from "meteor/mongo";
通常,一个包会导出一个或多个符号,您需要使用解构语法来引用这些符号。您可以通过查看该包的 package.js
文件中的 api.export
调用或查看该包的主 JavaScript 文件中的 ES2015 export
调用(例如 export const packageName = 'package-name';
)来找到这些导出的符号。
有时,包没有导出,并且在包含在应用程序中时会产生副作用。在这种情况下,您在安装后根本不需要导入包。
为了与 Meteor 1.2 和早期版本向后兼容,Meteor 默认情况下直接向您的应用程序提供您安装的任何包中
api.export
中引用的所有符号。但是,建议您先导入这些符号,然后再使用它们。
从 Atmosphere 包导入样式
使用 Meteor 支持的任何 CSS 预处理器,只要这些文件被指定为“导入”文件而被延迟评估,您就可以使用 {package-name}
语法导入其他样式文件。要详细了解如何确定这一点,请参阅 CSS 源与导入 文件。
@import '{prefix:package-name}/buttons/styles.import.less';
Atmosphere 包中的 CSS 文件使用
api.addFiles
声明,因此默认情况下会急切地进行评估,然后与应用程序中的所有其他 CSS 捆绑在一起。
对等 npm 依赖项
Atmosphere 包可以附带包含的 npm 依赖项,在这种情况下,您无需执行任何操作即可使其工作。但是,某些 Atmosphere 包会期望您在应用程序中安装了某些“对等”npm 依赖项。
通常,如果未这样做,包会向您发出警告。例如,如果您将 react-meteor-data
包安装到您的应用程序中,您还需要 安装 react
和 react-addons-pure-render-mixin
包
meteor npm install --save react react-addons-pure-render-mixin
meteor add react-meteor-data
Atmosphere 包命名空间
您在应用程序中使用的每个 Atmosphere 包都存在于其自己的独立命名空间中,这意味着它只能看到自己的全局变量以及其专门使用的包提供的任何变量。当在包中定义顶级变量时,它是使用局部作用域或包作用域声明的。
/**
* local scope - this variable is not visible outside of the block it is
* declared in and other packages and your app won't see it
*/
const alicePerson = {name: "alice"};
/**
* package scope - this variable is visible to every file inside of the
* package where it is declared and to your app
*/
bobPerson = {name: "bob"};
请注意,这只是声明局部或全局变量的正常 JavaScript 语法。Meteor 扫描您的源代码以查找全局变量赋值,并生成一个包装器,以确保您的全局变量不会超出其相应的命名空间。
除了局部作用域和包作用域之外,还有包导出。包导出是一个“伪全局”变量,包在您安装该包时提供给您使用。例如,email
包导出 Email
变量。如果您的应用程序使用 email
包(并且 *仅* 当它使用 email
包时!),那么您的应用程序可以访问 Email
符号,并且您可以调用 Email.send
。大多数包只有一个导出,但有些包可能有两个或三个(例如,提供几个协同工作的类的包)。
建议您使用
ecmascript
包,并在调用应用程序中的Email.send
之前先调用import { Email } from 'meteor/email';
。还建议包开发者现在从其主 JavaScript 文件中使用 ES2015export
而不是api.export
。
您的应用程序只能看到您直接使用的包的导出。如果您使用包 A,并且包 A 使用包 B,那么您只能看到包 A 的导出。包 B 的导出不会“泄漏”到您的命名空间中,仅仅因为您使用了包 A。每个应用程序或包只能看到它自己的全局变量以及其专门使用和依赖的包的 API。