Как можно построить интеллектуальный пакет Meteor, который будет отображаться в meteor list
?
Построение Atmosphere пакетов достаточно хорошо документально, но создание пакетов Meteor не является.
Как можно построить интеллектуальный пакет Meteor, который будет отображаться в meteor list
?
Построение Atmosphere пакетов достаточно хорошо документально, но создание пакетов Meteor не является.
Теперь 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.
Смотрите 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!
ПРИМЕЧАНИЕ. В настоящее время разработка пакета недокументирована, и API изменится. Вы были предупреждены!
Тем не менее, на самом деле довольно легко начать:
Во-первых, git клонировать копию метеорного репо. Сделайте себе новый каталог в /packages. Поместите файл package.js в каталог (см. Примеры других примеров). Теперь у вас есть пакет!
Затем запустите метеор script из вашего заказа (а не тот, который установлен установщиком). При запуске из проверки, script будет использовать каталог локальных пакетов в кассе. Это будет даже горячая перезагрузка при изменении кода в вашем пакете.
Посмотрите на другие пакеты для примеров и получите представление о том, что делает API.
EDIT: большой прогресс был достигнут с точки зрения пакетов сторонних производителей. Проверьте http://oortcloud.github.com/meteorite/ и https://atmosphere.meteor.com/
Это было датировано 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/.
Надеюсь, что это поможет и продолжит развивать лучший язык будущего.
Вот несколько полезных ссылок:
В этой теме есть хороший скринкаст на EventedMind.