【问题标题】:How can I modify the Meteor (meteorite) that is running?如何修改正在运行的 Meteor(陨石)?
【发布时间】:2023-03-21 06:40:01
【问题描述】:

开源项目的一个好处是您可以打开代码,查看它的作用,甚至修改它以帮助您了解底层

如何修改meteor(ite)的基本代码,以便我可以插入自己的控制台日志语句来查看代码是如何工作的?我将我的应用程序作为陨石应用程序运行 (mrt)

我尝试过但没有奏效的方法: * 编辑我的 .meteor 源代码树 * 编辑我的 .meteorite 源代码树 * 编辑 /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

在 ~/.meteor 中

  • .//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

【问题讨论】:

标签: open-source meteor meteorite


【解决方案1】:

看起来你在这里问了几件事,所以让我把它分解成不同的答案:

修改流星

这取决于你想怎么做。如果您在https://github.com/meteor/meteor/tree/devel/packages 接收其中一个包并将它们放入您的/packages 文件夹并运行

meteor add packagename

其中 packagename 是包的名称。这个包将覆盖meteor并让你使用它来修改它的代码。

如果您想更改流星本身,使其也影响您的所有其他项目,您需要在~/.meteor 下查找最新版本。

如果您修改项目的.meteor 目录中的文件,~/.meteor 中的文件将覆盖它们,您将看不到您的更改。

我建议使用第一种样式可能会更好,因为它不会干扰您的其他流星项目。

修改陨石

对于 Meteorite,您可以使用 npm link 让您使用 meteorite project on github 的 git 克隆。这将允许您将其用作 npm 模块,同时允许您修改代码以查看其在后台是如何工作的。

错误

Meteor 允许您使用两种类型的_id,通过Meteor.Collection.ObjectID 的 ObjectID 或字符串(只要它是唯一的,并且通常看起来像 Random.id() 给出的内容。

如果您跟踪跟踪,您似乎正在尝试使用一个集合,其中 _id 既不是 ObjectID 也不是字符串。如果您以某种方式在流星之外进行收藏,则可能会发生这种情况。要通过错误,请在流星之外修改您的集合并使用字符串或 ObjectID 的_ids

【讨论】:

  • 我将 minimongo 复制到 myApp/packages,运行 meteor add minimongo,最后插入了 'console.log('id is', id);'到第 844 行和第 845 行之间的 myApp/packages/minimongo/os/packages/minimongo.js (我没有更新注释掉的行号)。当我现在运行mrt 时,它会崩溃说“SyntaxError: Unexpected end of input”(见这个要点gist.github.com/MaerF0x0/6345337
  • 您需要检查您的代码是否有未闭合的括号或引号,至少这可能是输入错误意外结束的原因。没有足够的要点来确切地知道什么是错的。您还需要保持文件夹结构完整,将 minimongo.js 复制到 /packages。您还需要复制整个“minimongo”包。希望
  • 我的代码中没有错误,但我正在编辑哪个文件。我重试了你的指示,效果很好..
【解决方案2】:

回答与我收到的错误消息相关的细节,@Akshat 的回答对于通用“修改 Meteor”是正确的。

我的错误:

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);
  }
};

myApp/packages/minimongo/objectid.js

LocalCollection._looksLikeObjectID = function (str) {
  return str.length === 24 && str.match(/^[0-9a-f]*$/);
};

该对象确实是在流星之外构建的(正如@Akshat 怀疑的那样),因为我正在通过 API 为对象补水。该对象有一个名为“length”的值,它确实是 } else if (typeof id === 'object' && id !== null) { throw new Error("Meteor does not currently support objects other than ObjectID as ids"); } 部分。

会弄乱 _looksLikeObjectID 检查的示例对象如下:

var aCube = {
    width: 10,
    height: 10,
    length: 10, // <--- messes things up because .length < 24
    _id: ObjectId("521d23ad1d01960000000001")
}

因此,如果您遇到此错误,请检查对象是否具有 .length 字段。一种解决方法是将“长度”字段嵌套在其他内容中:

var aCube = {
    data: { 
        length:10
    }
};

【讨论】:

猜你喜欢
  • 2013-05-03
  • 2013-10-21
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多