web-dev-qa-db-ja.com

Meteorスマートパッケージのビルド方法

どのようにしてmeteor listに表示される Meteor smart package を構築できますか?

Atmosphere パッケージのビルドはかなりうまくいきます documented ですが、Meteorパッケージのビルドはそうではありません。

42
Olivier Refalo

Meteorはcreate --packageコマンドをサポートするようになりました。

meteor docs を参照してください。

例(独自の 流星開発者アカウント を「cunneen」に置き換えます):

meteor create --package cunneen:foo

出力:

cunneen:foo: created in your app

結果:

packages/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!

packages/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 を見てください。

21
cobberboy

Cobberboyの 下の回答 を参照してください

以下は古い情報です:

new流星のパッケージシステムに関する情報を参照してください: https://meteorhacks.com/meteor-weekly-meteor-09-rc-meteor-new-logo-underscore -in-templates.html

**古い情報**

独自のパッケージの作成 および 既存のサードパーティライブラリの再パッケージ に関する更新情報があります。ただし、APIは1.0まで安定しません。そのため、多くの変更を行う準備をしてください。

ボイラープレートを含めて、ノードと流星の両方を同時に使用できるライブラリーにしました。これを理解するにはかなりの時間がかかりました。

パッケージ:/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!

14
Mike Graf

注:パッケージの開発は現在文書化されておらず、APIが変更されます。警告されました!

とはいえ、実際に始めるのは非常に簡単です。

最初に、gitでmeteorリポジトリのコピーを作成します。/packagesに新しいディレクトリを作成します。 package.jsファイルをディレクトリに配置します(例については、他のパッケージを参照してください)。これでパッケージが手に入りました!

次に、チェックアウトから流星スクリプトを実行します(インストーラーによってインストールされたスクリプトではありません)。チェックアウトから実行すると、スクリプトはチェックアウトのローカルパッケージディレクトリを使用します。パッケージのコードを変更した場合でも、ホットリロードされます。

他のパッケージの例を確認し、APIの機能を理解してください。

編集:サードパーティのパッケージに関して多くの進歩がありました。 http://oortcloud.github.com/meteorite/https://atmosphere.meteor.com/ を確認してください。

13
n1mmy

これは2013年6月12日付でした。それは当時は正解であり、まだ代替ソリューションです。

N1mmyが言ったように。文書化されていないため、隕石を使用する必要があります。

流星でパッケージを作成することを主張する場合、私は良い非公式のハウツーを見つけましたが、実際にはこれを行うべきではありません。 Meteorは、次のリリースでパッケージを作成する方法を発表します。

Meteorパッケージの構築: https://coderwall.com/p/ork35q

Meteoriteを使用する方法

明らかにノードがあり、ノードパッケージマネージャー(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

次に、app/.meteor/meteorite /ディレクトリの下のファイルを分析します。

これがお役に立てば幸いです。そして将来の最良の言語を開発し続けてください。

ここにいくつかの役立つリンクがあります:

6
Eric Leroy

EventedMind のこのトピックに関する優れたスクリーンキャストがあります。

6
mquandalle