课程表

Meteor课程

工具箱
速查手册

Meteor 创建Package

当前位置:免费教程 » JS/JS库/框架 » Meteor

我们在报告错误的工作中已经创建了可重复使用的模式,为什么不把它打包让 Meteor 社区的其他人都可使用呢?

为了开始,我们需要一个 Meteor 开发者账号。你可以从 meteor.com 申请,但是很有可能当你注册这本书的时候已经得到了。不管哪种情况,你应该搞清楚你的用户名是什么,因为我们会在本章中大量使用它。

在本章中我们使用用户名 tmeasday,当然你也可以换成你自己的。

首先我们需要创建一个结构来存放新的包。使用命令 meteor create --package tmeasday:errors 来完成。需要注意的是 Meteor 已经创建了一个名为 packages/tmeasday:errors/ 的文件夹和一些文件。我们从编辑 package.js 开始,这文件会告诉 Meteor 如果使用这个包,有什么对象或函数要导出。

  1. Package.describe({
  2. name: "tmeasday:errors",
  3. summary: "A pattern to display application errors to the user",
  4. version: "1.0.0"
  5. });
  6. Package.onUse(function (api, where) {
  7. api.versionsFrom('0.9.0');
  8. api.use(['minimongo', 'mongo-livedata', 'templating'], 'client');
  9. api.addFiles(['errors.js', 'errors_list.html', 'errors_list.js'], 'client');
  10. if (api.export)
  11. api.export('Errors');
  12. });

当开发现实使用的 package 时,非常好的习惯就是在 git 部分的 Package.describe 代码块中,填写你代码库的 Git URL(比如,https://github.com/tmeasday/meteor-errors.git)。这样的话,用户可以浏览源代码,并且(假设你使用 GitHub)你的 package 的 readme 会显示在 Atomsphere 上。

让我们添加 3 个文件到 package 中。(我们可以删除 Meteor 自动添加的模板)我们可以从 Microscope 中 pull 这些文件而不用做太多修改,除了一些合适的命名和稍微清晰的 API:

  1. Errors = {
  2. // Local (client-only) collection
  3. collection: new Mongo.Collection(null),
  4. throw: function(message) {
  5. Errors.collection.insert({message: message, seen: false})
  6. }
  7. };
  1. <template name="meteorErrors">
  2. <div class="errors">
  3. {{#each errors}}
  4. {{> meteorError}}
  5. {{/each}}
  6. </div>
  7. </template>
  8. <template name="meteorError">
  9. <div class="alert alert-danger" role="alert">
  10. <button type="button" class="close" data-dismiss="alert">&times;</button>
  11. {{message}}
  12. </div>
  13. </template>
  1. Template.meteorErrors.helpers({
  2. errors: function() {
  3. return Errors.collection.find();
  4. }
  5. });
  6. Template.meteorError.rendered = function() {
  7. var error = this.data;
  8. Meteor.setTimeout(function () {
  9. Errors.collection.remove(error._id);
  10. }, 3000);
  11. };

在 Microscope 中测试 package

现在我们需要对 Microscope 做本地测试,以确保代码工作正确。为了链接包到项目,我们用命令 meteor add tmeasday:errors。然后,需要删除已经变得多余的现有文件:

  1. rm client/helpers/errors.js
  2. rm client/templates/includes/errors.html
  3. rm client/templates/includes/errors.js

我们需要做的另一件事情是做一些小的更新,使用正确的 API:

  1. {{> header}}
  2. {{> meteorErrors}}
  1. Meteor.call('postInsert', post, function(error, result) {
  2. if (error) {
  3. // display the error to the user
  4. Errors.throw(error.reason);
  1. Posts.update(currentPostId, {$set: postProperties}, function(error) {
  2. if (error) {
  3. // display the error to the user
  4. Errors.throw(error.reason);

一旦这些修改完成,我们就可恢复原来分包前的行为了。

写测试

开发包的第一个步骤是在一个应用程序中测试它,但接下来就是写一个测试套件,正确的测试包的行为。Meteor 本身自带 Tinytest(内置的包测试仪),它可以很容易地运行测试套件,以便与他人分享包时确保正确。

让我们创建一个测试文件,使用 Tinytest 来运行一些对新的包测试:

  1. Tinytest.add("Errors - collection", function(test) {
  2. test.equal(Errors.collection.find({}).count(), 0);
  3. Errors.throw('A new error!');
  4. test.equal(Errors.collection.find({}).count(), 1);
  5. Errors.collection.remove({});
  6. });
  7. Tinytest.addAsync("Errors - template", function(test, done) {
  8. Errors.throw('A new error!');
  9. test.equal(Errors.collection.find({}).count(), 1);
  10. // render the template
  11. UI.insert(UI.render(Template.meteorErrors), document.body);
  12. Meteor.setTimeout(function() {
  13. test.equal(Errors.collection.find({}).count(), 0);
  14. done();
  15. }, 3500);
  16. });

在这些测试中,我们检查基本的 Meteor.Errors 的功能是否工作,以及再次确认该模板中的 rendered 代码是否仍在工作。

我们不会在这里写 Meteor 包测试的所有细节(而且 API 尚未最终确定,很有可能会有变化),但希望它是在一定程度上自我解释其工作原理。

使用下面的代码告诉 Meteor 如何在 package.js 中运行测试:

  1. Package.onTest(function(api) {
  2. api.use('tmeasday:errors', 'client');
  3. api.use(['tinytest', 'test-helpers'], 'client');
  4. api.addFiles('errors_tests.js', 'client');
  5. });

然后我们就可以运行测试:

  1. meteor test-packages tmeasday:errors

发布 package

现在我们要发布这个包,把它推送到 Meteor package 服务器,在 Atmopshere 中显示出来,让全世界的人都可使用。

幸运的是这很容易。我们只是 cd 到包的目录,运行命令 meteor publish --create

  1. cd packages/tmeasday:errors
  2. meteor publish --create

既然包已经发布,我们可以从项目中删除它,然后直接从 Atmopshere 重新添加它:

  1. rm -r packages/tmeasday:errors
  2. meteor add tmeasday:errors

现在我们应该看到 Meteor 第一次下载了我们的 package。很棒!

和往常的附录章节一样,确保先恢复你所做的改动,然后再进行下一章(或者在阅读本书其他章节时,考虑你所做的改动。)

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号