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

时间:2016-06-24 12:34:20

标签: javascript git meteor meteor-packages

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

我使用了一些方法来覆盖核心包。

克隆整个存储库并链接目录

如果您想要对项目进行更改,这非常有用。您应该分叉存储库并克隆自己的fork。

  1. 克隆meteor存储库:

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

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

  2. 链接包目录(在项目的packages目录中)
    ln -s ../../(...)/meteor/packages/
    
    当然,您可以签出所需的分支/提交并将它们复制到本地packages目录。
  3. 仅静态下载程序包目录

    有一个巧妙的技巧,允许您使用svn从GitHub下载给定目录。

    这是通过发出:

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

    例如:

    ddp-client分支克隆devel

    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. 流星预计会在某个时刻切换到NPM(可能在Meteor v1.5中),因此请确保仅使用此答案中指定的方法用于流星自己的包装系统。