Open source 如何修改正在运行的流星(陨石)?
开源项目的好处之一是,您可以打开代码,查看它的功能,甚至对其进行修改,以帮助您深入理解 如何修改meteor(ite)的基本代码,以便插入自己的控制台日志语句来查看代码的工作方式?我将应用程序作为meteorite应用程序运行(Open source 如何修改正在运行的流星(陨石)?,open-source,meteor,meteorite,Open Source,Meteor,Meteorite,开源项目的好处之一是,您可以打开代码,查看它的功能,甚至对其进行修改,以帮助您深入理解 如何修改meteor(ite)的基本代码,以便插入自己的控制台日志语句来查看代码的工作方式?我将应用程序作为meteorite应用程序运行(mrt) 我尝试过但没有成功的事情: *编辑我的流星源树 *编辑我的陨石源树 *编辑/myApp/.meteor/local/build 其他详情: 我的特定用例(虽然答案应该比回答这个更一般)是,我得到了一个错误“队列任务中的异常:错误:Meteor当前不支持Objec
mrt
)
我尝试过但没有成功的事情:
*编辑我的流星源树
*编辑我的陨石源树
*编辑/myApp/.meteor/local/build
其他详情:
我的特定用例(虽然答案应该比回答这个更一般)是,我得到了一个错误“队列任务中的异常:错误:Meteor当前不支持ObjectID以外的对象作为id”,并希望console.log该id是什么(即,如果它不是ObjectID,那么它是什么?)
以下是全部错误:
I20130826-10:36:36.038(-6)? Exception in queued task: Error: Meteor does not currently support objects other than ObjectID as ids
I20130826-10:36:36.039(-6)? at Function.LocalCollection._idStringify (packages/minimongo/minimongo.js:845)
I20130826-10:36:36.039(-6)? at _.extend._nextObject (packages/mongo-livedata/mongo_driver.js:549)
I20130826-10:36:36.039(-6)? at _.extend.forEach (packages/mongo-livedata/mongo_driver.js:570)
I20130826-10:36:36.039(-6)? at _.extend.getRawObjects (packages/mongo-livedata/mongo_driver.js:621)
I20130826-10:36:36.039(-6)? at _.extend._pollMongo (packages/mongo-livedata/mongo_driver.js:897)
I20130826-10:36:36.040(-6)? at Object._.extend._unthrottledEnsurePollIsScheduled [as task] (packages/mongo-livedata/mongo_driver.js:841)
I20130826-10:36:36.040(-6)? at _.extend._run (packages/meteor/fiber_helpers.js:144)
I20130826-10:36:36.040(-6)? at _.extend._scheduleRun (packages/meteor/fiber_helpers.js:122)
在myApp/目录中的以下文件中找到错误消息:
- .//.meteor/local/build/programs/client/packages/minimongo.js
- .//.meteor/local/build/programs/client/packages/minimongo.js.map
- .//.meteor/local/build/programs/ctl/packages/minimongo.js
- .//.meteor/local/build/programs/ctl/packages/minimongo.js.map
- .//.meteor/local/build/programs/server/packages/minimongo.js
- .//.meteor/local/build/programs/server/packages/minimongo.js.map
- .//packages/minimongo/2c0b2ba53f/browser/packages/minimongo.js
- .//packages/minimongo/2c0b2ba53f/browser/packages/minimongo.js.map
- .//packages/minimongo/2c0b2ba53f/os/packages/minimongo.js
- .//packages/minimongo/2c0b2ba53f/os/packages/minimongo.js.map
- .//packages/minimongo/80c0a81364a8a504110b56f3e9a2cba2d4e731ee/minimongo.js
/packages
文件夹中,然后运行
meteor add packagename
其中,packagename是包的名称。这个软件包将覆盖meteor,并允许您在修改代码时使用它
如果您想更改meteor本身,使其也影响所有其他项目,则需要在~/.meteor
下查找最新版本
如果修改项目的.meteor
目录中的文件,则~/.meteor
中的文件将覆盖它们,您将看不到所做的更改
我建议最好使用第一种样式,因为它不会干扰您的其他meteor项目
修改陨石
当谈到陨石时,你们可以使用git克隆的。这将允许您将其用作npm模块,同时还允许您修改代码以查看其在引擎盖下的工作情况
错误
Meteor允许您使用两种类型的\u id
,一个ObjectID via或一个字符串(只要它是唯一的,并且通常看起来像Random.id()
给出的内容)
如果您跟踪跟踪,看起来您正试图使用一个集合,其中
\u id
既不是ObjectID也不是字符串。如果您以某种方式在meteor之外创建了集合,则可能会发生这种情况。若要通过此错误,请在meteor之外修改您的集合,并使用字符串或ObjectIDI看起来你在问一些问题,所以让我把它分解成不同的答案:
修改流星
这取决于您想如何操作。如果您在上取下其中一个软件包,并将其放置在您的/packages
文件夹中,然后运行
meteor add packagename
其中,packagename是包的名称。此包将覆盖meteor,并允许您在修改代码时使用它
如果您想更改meteor本身,使其也影响所有其他项目,则需要在~/.meteor
下查找最新版本
如果修改项目的.meteor
目录中的文件,则~/.meteor
中的文件将覆盖它们,您将看不到所做的更改
我建议最好使用第一种样式,因为它不会干扰您的其他meteor项目
修改陨石
当谈到Meteorite时,你可以使用它的git克隆。这将使你可以将它用作npm模块,同时还可以修改代码以查看它在引擎盖下是如何工作的
错误
Meteor允许您使用两种类型的\u id
,一个ObjectID via或一个字符串(只要它是唯一的,并且通常看起来像Random.id()
给出的内容)
如果您跟踪跟踪,看起来您正试图使用一个集合,其中
\u id
既不是ObjectID也不是字符串。如果您以某种方式在meteor之外创建了集合,则可能会发生这种情况。若要通过错误,请在meteor之外修改您的集合,并使用字符串或ObjectIDa在回答与我收到的错误信息相关的细节时,@Akshat的回答对于一般用途的“修改流星”是正确的
我的错误:
I20130826-10:36:36.038(-6)? Exception in queued task: Error: Meteor does not currently support objects other than ObjectID as ids
I20130826-10:36:36.039(-6)? at Function.LocalCollection._idStringify (packages/minimongo/minimongo.js:845)
I20130826-10:36:36.039(-6)? at _.extend._nextObject (packages/mongo-livedata/mongo_driver.js:549)
I20130826-10:36:36.039(-6)? at _.extend.forEach (packages/mongo-livedata/mongo_driver.js:570)
I20130826-10:36:36.039(-6)? at _.extend.getRawObjects (packages/mongo-livedata/mongo_driver.js:621)
I20130826-10:36:36.039(-6)? at _.extend._pollMongo (packages/mongo-livedata/mongo_driver.js:897)
I20130826-10:36:36.040(-6)? at Object._.extend._unthrottledEnsurePollIsScheduled [as task] (packages/mongo-livedata/mongo_driver.js:841)
I20130826-10:36:36.040(-6)? at _.extend._run (packages/meteor/fiber_helpers.js:144)
I20130826-10:36:36.040(-6)? at _.extend._scheduleRun (packages/meteor/fiber_helpers.js:122)
Minimongo检查对象以尝试并决定如何使用以下代码将其字符串化请参见调用_looksLikeObjectID(id):
myApp/packages/minimongo/minimongo.js
LocalCollection._idStringify = function (id) {
if (id instanceof LocalCollection._ObjectID) {
return id.valueOf();
} else if (typeof id === 'string') {
if (id === "") {
return id;
} else if (id.substr(0, 1) === "-" || // escape previously dashed strings
id.substr(0, 1) === "~" || // escape escaped numbers, true, false
LocalCollection._looksLikeObjectID(id) || // escape object-id-form strings
id.substr(0, 1) === '{') { // escape object-form strings, for maybe implementing later
return "-" + id;
} else {
return id; // other strings go through unchanged.
}
} else if (id === undefined) {
return '-';
} else if (typeof id === 'object' && id !== null) {
throw new Error("Meteor does not currently support objects other than ObjectID as ids");
} else { // Numbers, true, false, null
return "~" + JSON.stringify(id);
}
};
LocalCollection._looksLikeObjectID = function (str) {
return str.length === 24 && str.match(/^[0-9a-f]*$/);
};
myApp/packages/minimongo/objectid.js
LocalCollection._idStringify = function (id) {
if (id instanceof LocalCollection._ObjectID) {
return id.valueOf();
} else if (typeof id === 'string') {
if (id === "") {
return id;
} else if (id.substr(0, 1) === "-" || // escape previously dashed strings
id.substr(0, 1) === "~" || // escape escaped numbers, true, false
LocalCollection._looksLikeObjectID(id) || // escape object-id-form strings
id.substr(0, 1) === '{') { // escape object-form strings, for maybe implementing later
return "-" + id;
} else {
return id; // other strings go through unchanged.
}
} else if (id === undefined) {
return '-';
} else if (typeof id === 'object' && id !== null) {
throw new Error("Meteor does not currently support objects other than ObjectID as ids");
} else { // Numbers, true, false, null
return "~" + JSON.stringify(id);
}
};
LocalCollection._looksLikeObjectID = function (str) {
return str.length === 24 && str.match(/^[0-9a-f]*$/);
};
该对象确实是在meteor之外构建的(正如@Akshat所怀疑的),因为我正在从API中水合一个对象。该对象有一个名为“长度”的值,它确实小于24。这导致它脱离了“字符串”样式的解释,并进入