Meteor - Package.js



在本章中,我们将学习如何创建自己的 meteor 包。

创建包

让我们在桌面上添加一个新文件夹,将在其中创建包。我们将使用命令提示符窗口。

C:\Users\username\Desktop\meteorApp> mkdir packages

现在,我们可以在上面创建的文件夹中创建包。从命令提示符运行以下命令。用户名是 Meteor 开发人员用户名,包名称是包的名称。

C:\Users\username\Desktop\meteorApp\packages>meteor create --package username:package-name

添加包

为了能够将本地包添加到我们的应用程序,我们需要设置环境变量,它将告诉 Meteor 从本地文件夹加载包。右键单击计算机图标并选择属性/高级系统设置/环境变量/新建

变量名应为PACKAGE_DIRS。变量值应为我们创建的文件夹的路径。在我们的例子中,C:\Users\username\Desktop\meteorApp\packages

添加新的环境变量后,不要忘记重新启动命令提示符

我们现在可以通过运行以下代码将包添加到我们的应用程序中 -

C:\Users\username\Desktop\meteorApp>meteor add username:package-name

包文件

在我们创建的包中将找到以下四个文件。

  • package-name-test.js
  • package-name.js
  • package.js
  • README.md

测试包 (package-name-test.js)

Meteor 提供了tinytest包用于测试。让我们首先使用命令提示符窗口中的以下命令安装它。

C:\Users\username\Desktop\meteorApp>meteor add tinytest

如果我们打开package-name-test.js,我们将看到默认的测试示例。我们将使用此示例来测试应用程序。注意:在开发 meteor 包时,最好编写我们自己的测试。

要测试包,让我们在命令提示符中运行此代码。

C:\Users\username\Desktop>meteor test-packages packages/package-name

我们将得到以下结果。

Meteor Package Test

package.js 文件

这是我们可以编写代码的文件。让我们为我们的包创建一些简单的功能。我们的包将在控制台中记录一些文本。

packages/package.js

myPackageFunction = function() {
   console.log('This is simple package...');
}

package-name.js 文件

这是我们可以设置一些包配置的文件。我们稍后会回到它,但现在我们需要导出myPackageFunction以便我们可以在我们的应用程序中使用它。我们需要在Package.onUse函数内添加它。该文件将如下所示。

packages/package-name.js

Package.describe({
   name: 'username:package-name',
   version: '0.0.1',
   
   // Brief, one-line summary of the package.
   summary: '',
   
   // URL to the Git repository containing the source code for this package.
   git: '',
   
   // By default, Meteor will default to using README.md for documentation.
   
   // To avoid submitting documentation, set this field to null.
   documentation: 'README.md'
});

Package.onUse(function(api) {
   api.versionsFrom('1.2.1');
   api.use('ecmascript');
   api.addFiles('mypackage.js');
   api.export('myPackageFunction'); // We are exporting the function we created above...
});

Package.onTest(function(api) {
   api.use('ecmascript');
   api.use('tinytest');
   api.use('username:package-name');
   api.addFiles('package-name-tests.js');
});

使用包

现在我们终于可以从我们的meteorApp.js文件中调用myPackageFunction()了。

packages/package.js

if(Meteor.isClient) {
   myPackageFunction();
}

控制台将记录我们包中的文本。

Meteor Package Log

为了更好地理解如何配置package.js文件,我们将使用 Meteor 官方文档中的示例。

这是一个示例文件...

/* Information about this package */
Package.describe({
   
   // Short two-sentence summary.
   summary: "What this does",

   // Version number.
   version: "1.0.0",

   // Optional.  Default is package directory name.
   name: "username:package-name",

   // Optional github URL to your source repository.
   git: "https://github.com/something/something.git",
});

/* This defines your actual package */
Package.onUse(function (api) {

   // If no version is specified for an 'api.use' dependency, use the
   // one defined in Meteor 0.9.0.
   api.versionsFrom('0.9.0');

   // Use Underscore package, but only on the server.
   // Version not specified, so it will be as of Meteor 0.9.0.
   api.use('underscore', 'server');

   // Use iron:router package, version 1.0.0 or newer.
   api.use('iron:[email protected]');

   // Give users of this package access to the Templating package.
   api.imply('templating')

   // Export the object 'Email' to packages or apps that use this package.
   api.export('Email', 'server');

   // Specify the source code for the package.
   api.addFiles('email.js', 'server');
});

/* This defines the tests for the package */
Package.onTest(function (api) {

   // Sets up a dependency on this package
   api.use('username:package-name');

   // Allows you to use the 'tinytest' framework
   api.use('[email protected]');

   // Specify the source code for the package tests
   api.addFiles('email_tests.js', 'server');
});

/* This lets you use npm packages in your package*/
Npm.depends({
   simplesmtp: "0.3.10",
   "stream-buffers": "0.2.5"
});
广告