Ответ 1

Теперь Meteor поддерживает команду create --package.

Смотрите метеорные документы.

Пример (замените свою собственную учетную запись метеоритов для "cunneen" ):

meteor create --package cunneen:foo

Вывод:

cunneen:foo: created in your app

Результаты:

Пакеты /Cunneen: Foo/package.js

Package.describe({
  name: 'cunneen:foo',
  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.0.3.1');
  api.addFiles('cunneen:foo.js');
});

Package.onTest(function(api) {
  api.use('tinytest');
  api.use('cunneen:foo');
  api.addFiles('cunneen:foo-tests.js');
});

packages/cunneen: foo/foo.js(пустой файл)

// Write your package code here!

Пакеты /Cunneen: Foo/Foo-tests.js

// Write your tests here!
// Here is an example.
Tinytest.add('example', function (test) {
  test.equal(true, true);
});

packages/cunneen: foo/README.md(пустой файл)

# cunneen:foo package

Для хорошего (ОЧЕНЬ всеобъемлющего) примера взгляните на iron-router.

Ответ 2

Смотрите cobberboy ответ ниже

Ниже приведена устаревшая информация:

Смотрите информацию о новой системе метеорной упаковки: https://meteorhacks.com/meteor-weekly-meteor-09-rc-meteor-new-logo-underscore-in-templates.html

** более старая информация **

Обновлена ​​информация о написание собственного пакета и переупаковка существующих сторонних библиотек. API не будет стабильным до 1.0, поэтому будьте готовы внести много изменений.

Я включил плиту котла, чтобы помочь сделать ее как node, так и полезной библиотекой метеора сразу. Это заняло у меня довольно много времени, чтобы разобраться в этом.

пакет:/lib/my.js

if (typeof Meteor === 'undefined) {
    // Not Running In Meteor (nodejs code)
    // example NPM/Node Dependencies that we'll use
    var async = require('async');
    var debug = require('debug')('my:package');
    var mongodb = require('mongodb');

    var http = require('http');  
} else {
    // Running as Meteor Package
    var async = Npm.require('async');
    var debug = Npm.require('debug')('my:package');
    var mongodb = Npm.require('mongodb');

    // node core module 'http'
    // use Npm.require to require node core modules
    // but doesnt need Npm.depends in the package.js file
    var http = Npm.require('http');
}

var constructor = function(property1) {
    this.property1 = property1; // or whatever in your constructor.
};

if (typeof Meteor === 'undefined') {
   // Export it node style
   My = exports = module.exports = constructor; // Limit scope to this nodejs file
} else {
   // Export it meteor style
   My = constructor; // Make it a global
}

// Proceed defining methods / properties as usual.
My.prototype.doStuff = function() { console.log('hello world'); }

пакет:/package.js

Package.describe({
  summary: "My Meteor Package"
});

/**
 * Ex: Some NPM Dependencies
 */
Npm.depends({
  'async': '0.2.9',
  'debug': '0.7.2',
  'mongodb': '1.3.18'
});

/**
 * On use we'll add files and export our tool
 */
Package.on_use(function (api) {
  /**
   * Add all the files, in the order of their dependence (eg, if A.js depends on B.js, B.js must be before A.js)
   */
  api.add_files([
    'lib/my.js' // <-- include all the necessary files in the package
    ],
    'server'); // Can be 'server', 'client' , ['client','server']

  /**
   * Only expose the My constructor, only export if meteor > 0.6.5
   */
  api.export && api.export(['My'], 'server'); // 1st arg can be array of exported constructors/objects, 2nd can be 'server', 'client', ['client', 'server']
});

meteor app: некоторый файл в правильном контексте клиент/сервер (как определено в package.js)

var my = new My('a property');
my.doStuff(); // console logs 'hello world' on the server

meteor app: smart.json, добавьте свой файл в список пакетов

{
    packages:{
        "node-my": {
            "git": "[email protected]:myAccount/node-my.git"
        }
    }
}

Наконец запустите mrt install в командной строке, чтобы установить пакет. Whew!

Ответ 3

ПРИМЕЧАНИЕ. В настоящее время разработка пакета недокументирована, и API изменится. Вы были предупреждены!

Тем не менее, на самом деле довольно легко начать:

Во-первых, git клонировать копию метеорного репо. Сделайте себе новый каталог в /packages. Поместите файл package.js в каталог (см. Примеры других примеров). Теперь у вас есть пакет!

Затем запустите метеор script из вашего заказа (а не тот, который установлен установщиком). При запуске из проверки, script будет использовать каталог локальных пакетов в кассе. Это будет даже горячая перезагрузка при изменении кода в вашем пакете.

Посмотрите на другие пакеты для примеров и получите представление о том, что делает API.

EDIT: большой прогресс был достигнут с точки зрения пакетов сторонних производителей. Проверьте http://oortcloud.github.com/meteorite/ и https://atmosphere.meteor.com/

Ответ 4

Это было датировано 12 июня 2013 года. В то время это был правильный ответ и по-прежнему является альтернативным решением:

Как сказал n1mmy. Это недокументировано, и вы должны использовать метеорит.

Если вы настаиваете на создании пакета с метеор, я нашел хороший неофициальный How-to, но вы действительно не должны этого делать. Метеор будет выпускать способ создания пакетов в предстоящем выпуске.

Буксировка пакета Метеор: https://coderwall.com/p/ork35q

То, как я это сделаю, - это Метеорит

Очевидно, что у вас есть node, и я предполагаю, что у вас есть менеджер пакетов node (npm), поэтому ваш лучший способ сделать метеорный пакет на сегодняшний день - сделать интеллектуальный пакет метеоритов.

npm install meteorite

Интеллектуальные пакеты Meteorite содержат 2 ключевых файла, необходимых для создания пакета  - package.js  - smart.json

Метеоритные файлы хранятся под вашей системой, зарегистрированной в учетной записи пользователя: ~/.meteorite/
но символически привязаны к вашему течению, когда вы создали приложение метеорита: project/. meteor/meteorite/

Образец package.js:

Package.describe({
   summary: "User analytics suite for meteor"
});

Package.on_use(function (api) {
   api.add_files('user_analytics.js', 'client');
});

Пример smart.json

{
   "name": "User analytics",
   "description": "User Analytics",
   "homepage": "http://yourHomepage.com",
   "author": "Eric Leroy",
   "version": "0.1",
   "git": "https://github.com/yipyo",
   "packages" : {}
}

Если вам нужна дополнительная информация, вы должны установить пакет mrt из списка:

mrt list

затем проанализируйте файлы в каталоге вашего приложения /. meteor/meteorite/.

Надеюсь, что это поможет и продолжит развивать лучший язык будущего.

Вот несколько полезных ссылок:

Ответ 5

В этой теме есть хороший скринкаст на EventedMind.