原始问题 - 已修复(见下文)
我是流星新手,并尝试使用 Ian Serlin 的流星平衡支付包(https://github.com/ianserlin/meteor-balanced-payments)。该软件包似乎已正确安装,但我在客户端和服务器端都遇到了问题,只是为了正确加载软件包以开始使用它。如果有人有,我可以使用一个完整的运行示例。
客户端看起来像是在meteor-balanced-payments 提倡使用的session-extras 包之后加载了下划线内置包。请注意,Meteor.settings.public.balanced.marketplaceUri
已正确设置为我的测试市场 Uri 格式的字符串/v1/marketplaces/TEST-########################
。客户端初始化代码是:
[客户端/main.js]:
Meteor.startup(function() {
Session.whenTrue("balancedLoaded", function() {
balanced.init(Meteor.settings.public.balanced.marketplaceUri);
});
});
运行时,Chrome javascript 控制台中会出现以下错误。session-extras.js 的第一行是"_.extend(Session,{"
,表示问题出在第一个"_"
下划线的使用上。有什么建议该怎么做吗?包不是使依赖关系明确吗?我不知道该怎么做才能纠正。
Uncaught ReferenceError: _ is not defined session-extras.js:1
Uncaught TypeError: Object [object Object] has no method 'whenTrue'
第二个问题是服务器端未能声称 nbalanced 不存在。服务器的代码和相应的控制台错误如下。这看起来就是meteor-balanced-payments包文档建议的方式。nbalanced 作为 Npm 依赖项在 smart 包中,它作为包的一部分构建。有什么建议为什么nbalanced
没有定义?
[服务器/bootstrap.js]:
Meteor.startup(function () {
balanced = new nbalanced({
secret: Meteor.settings.balanced.apiSecret,
marketplace_uri: Meteor.settings.balanced.marketplaceUri
});
});
控制台输出:
2042-01:58:33.453(-4)? (STDERR) /Users/foo/test-payments4/.meteor/local/build/programs/server/boot.js:185
W2042-01:58:33.454(-4)? (STDERR) }).run();
W2042-01:58:33.454(-4)? (STDERR) ^
W2042-01:58:33.456(-4)? (STDERR) ReferenceError: nbalanced is not defined
W2042-01:58:33.457(-4)? (STDERR) at app/server/bootstrap.js:12:18
W2042-01:58:33.457(-4)? (STDERR) at /Users/foo/test-payments4/.meteor/local/build/programs/server/boot.js:158:61
W2042-01:58:33.457(-4)? (STDERR) at Array.forEach (native)
W2042-01:58:33.457(-4)? (STDERR) at Function._.each._.forEach (/Users/foo/.meteor/tools/a80b2d5689/lib/node_modules/underscore/underscore.js:79:11)
W2042-01:58:33.458(-4)? (STDERR) at /Users/foo/test-payments4/.meteor/local/build/programs/server/boot.js:158:5
=> Exited with code: 8
其他相关文件...
[智能.json]:
{
"packages": {
"balanced-payments": {},
"session-extras": {},
"sync-methods": {}
}
}
[智能锁]:
{
"meteor": {},
"dependencies": {
"basePackages": {
"balanced-payments": {},
"session-extras": {},
"sync-methods": {}
},
"packages": {
"balanced-payments": {
"git": "https://github.com/ianserlin/meteor-balanced-payments.git",
"tag": "v0.1.1",
"commit": "6ebc8f9855f35c040b67f0d9bebf16870160c1b2"
},
"session-extras": {
"git": "https://github.com/belisarius222/meteor-session-extras.git",
"tag": "v0.3.0",
"commit": "0c49d41009821e76f46af3ad65d0a1d5bfa8d4eb"
},
"sync-methods": {
"git": "https://github.com/ianserlin/meteor-sync-methods.git",
"tag": "v0.1.1",
"commit": "2a7b094d54f3fb7c9acebbe10b68f9db1e5f156b"
}
}
}
}
相关版本号:
$ uname -a
Darwin mini-en0.home 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
$ node --version
v0.10.19
$ mrt --version
Meteorite version 0.6.14
解决方案
问题是这两个包(balanced-payments 和 session-extras)都没有针对 0.6.5 命名空间更改进行更新。我对包的本地副本进行了以下更改以使其正常工作。现在它运行得很干净。
[balanced-payments/package.js]:需要使用 api.export() 导出 nbalanced 符号,以便服务器可以使用它...
Package.describe({
summary: 'Balanced Payments (nbalanced packaged for meteor)'
});
Npm.depends({
'nbalanced': 'https://github.com/ianserlin/nbalanced/tarball/05eb18cf3536e22b62f349d0520e5df23740dd5c'
});
Package.on_use(function (api) {
api.use('sync-methods', 'server');
api.add_files('index.js', 'server');
api.add_files('balanced.js', 'client');
api.export('nbalanced', 'server');
});
[session-extras/package.js]:需要通过api.use()导入下划线和session,这样可以扩展Session...
Package.describe({
summary: "a few useful helpers for Meteor's Session"
});
Package.on_use(function (api) {
api.use('underscore', 'client');
api.use('session', 'client');
api.add_files([
'session-extras.js'
],'client');
});