如何构建meteor list
中显示的Meteor smart package?
构建Atmosphere软件包相当合理documented,但不构建Meteor软件包。
答案 0 :(得分:21)
Meteor现在支持 create --package
命令。
请参阅the meteor docs。
示例(将您自己的meteor developer account替换为“cunneen”):
meteor create --package cunneen:foo
输出:
cunneen:foo: created in your app
结果:
<强>包/ cunneen:富/ 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-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。
答案 1 :(得分:14)
参见cobberboy的answer below
以下是过时的信息:
查看有关 new 流星包装系统的信息: https://meteorhacks.com/meteor-weekly-meteor-09-rc-meteor-new-logo-underscore-in-templates.html
**旧信息**
有关于writing your own package和repackaging existing 3rd party libraries的最新信息。虽然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": "git@github.com:myAccount/node-my.git"
}
}
}
最后在命令行上运行mrt install
以安装软件包.. 哇!
答案 2 :(得分:13)
注意:程序包开发目前未记录,API将更改。你已被警告过了!
尽管如此,它实际上很容易上手:
首先,git克隆流星回购的副本。在/ packages中创建一个新目录。将package.js文件放在目录中(有关示例,请参阅其他包)。现在你有了一个包裹!
接下来,从结帐时运行meteor脚本(不是安装程序安装的脚本)。从结帐运行时,脚本将使用结帐时的本地包目录。当您更改包中的代码时,它甚至会重新加载。
浏览其他软件包以获取示例,并了解API的用途。
编辑:在第三方软件包方面取得了很大进展。查看http://oortcloud.github.com/meteorite/和https://atmosphere.meteor.com/
答案 3 :(得分:6)
这是日期为2013年6月12日。这是当时的正确答案,仍然是另一种解决方案:
像n1mmy说的那样。它没有记录,你应该使用陨石。如果你坚持用流星创建一个包,我找到了一个很好的非官方操作方法,但你真的不应该这样做。 Meteor将在即将发布的版本中推出一种创建软件包的方法。
Bulding 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 /目录下的文件。
希望这会有所帮助,并继续发展未来的最佳语言。
以下是一些有用的链接:
答案 4 :(得分:6)
在EventedMind上有一个关于此主题的精彩截屏视频。