如何覆盖项目中的 Meteor 核心包?

How to Override Meteor Core Packages in a Project?

对于 Meteor 项目,我想更改 Meteor Core 库文件。

这可能吗?如果可能,怎么做?

到目前为止,我已经尝试将文件复制到我的项目目录中,希望相应的对象只是从原始对象中覆盖,但问题是相关函数或变量仅在本地定义。

然后我尝试将它们 git clone 放入项目的 packages 目录中,就像使用社区包一样,但是由于克隆命令失败(fatal: repository ... not found) 并且包没有在 .meteor/packages 文件中显式调用。

有什么想法吗?

Meteor 允许在项目中包含本地包,包括覆盖现有(社区或核心)包的包。

虽然在本地覆盖社区包通常只需要将 GitHub 存储库克隆(或提取或添加为子模块)到 /packages 文件夹中,但核心包目前位于主目录的子目录中meteor/meteor 存储库,这使得克隆它们变得更加棘手。

覆盖核心包可能需要您手动将更改应用于包作为 Meteor 或包更新(因为 Meteor 过去依赖于特定的包版本)。

因此,在采取此步骤之前,确保您确实需要这样做

确保您不能使用本地文件或您自己的本地包进行更改(例如,通过包装或替换函数或对其进行猴子修补)。

我使用了几种方法来覆盖核心包。

克隆整个存储库和link目录

如果您想将您的更改贡献给项目,这将很有用。您可能应该 fork 存储库并克隆您自己的 fork。

  1. 克隆流星存储库:

    git clone https://github.com/meteor/meteor.git
    

    git clone git@github.com:<username>/meteor.git 如果你分叉了它

  2. Link 包目录(在你项目的 packages 目录中)
    ln -s ../../(...)/meteor/packages/
    
    当然,您可以签出所需的 branch/commit 并将它们复制到本地 packages 目录。

只静态下载包目录

有一个巧妙的技巧可以让您使用 svn.

从 GitHub 下载给定目录

这是通过发布获得的:

svn export https://github.com/meteor/meteor/[trunk|branches/]/packages/

例如:

devel 分支克隆 ddp-client

svn export https://github.com/meteor/meteor/branches/devel/packages/ddp-client

或来自 master 分支:

svn export https://github.com/meteor/meteor/trunk/packages/ddp-client

备注:

  1. 如前所述,如果您更新 Meteor,您可能需要手动应用更改。
  2. 如果您还没有将包添加到项目 (meteor add <package>),请不要忘记。
  3. Meteor 预计会在某个时候切换到 NPM(可能在 Meteor v1.5 中),因此请确保仅对 Meteor 自己的打包系统使用此答案中指定的方法。