【问题标题】:Using non-npm-package git submodules in npm packages在 npm 包中使用非 npm 包 git 子模块
【发布时间】:2015-05-26 22:29:23
【问题描述】:

如何在安装前更新我的 包中的non-npm-package

我正在使用 git 并且有一个 node.js 模块,该模块依赖于一个外部项目,该项目也托管在一个 git 存储库中。我将外部项目添加为子模块,现在我正在尝试制作一个 npm 包。

由于外部依赖不是npm包(也不是node模块),我觉得我不能使用npm submodule命令,所以我想出了thispackage.json文件中的预安装脚本:

"scripts": { "preinstall" : "git submodule update --init"}

当我在包目录中执行npm install 时,它工作正常,但是当我尝试直接从我的远程git 存储库或使用npm pack 制作的tarball 安装包时,我收到以下错误:

您需要从工作树的顶层运行此命令。

我也试过(如错误消息所说):

"scripts": { "preinstall" : "cd $(git rev-parse --show-toplevel) && git submodule update --init"}

这个没有显示任何错误,但也没有更新包目录中的子模块。

任何帮助将不胜感激。

【问题讨论】:

    标签: git-submodules npm git node.js npm git-submodules


    【解决方案1】:

    你下载的npm,一旦解压,就不再包含git信息(没有.git目录)。

    所以没有 git 命令会以这种方式工作,而是在本地工作,因为你有 git 信息。

    至于解决方案,您可能必须创建一个脚本来执行 npm pack 所做的工作,但不忽略子模块。

    我没有尝试过,但这个脚本 https://github.com/Kentzo/git-archive-all 可能是开箱即用的,类似于

    git-archive-all --prefix package/ module.tgz
    

    可能需要一些调整...

    【讨论】:

    • 你确定解压的包没有.git目录吗?如果是这样,我应该能够在那里初始化一个 git 回购,因为 .gitmodules 已经存在,我可以简单地更新 git submodules
    • 我确定 .git 不是 npm pack 生成的存档的一部分。运行 git init 可能会起作用。值得一试。作为一个 npm 消费者,我不确定我是否愿意为给定版本获取不同的代码,但如果这是供您自己使用,并且您可以接受,那么可以。
    • 我试过git init,它初始化了一个空的git仓库。但我不得不再次手动添加submodules;似乎在存储库中有.gitmodules 不足以让git 识别submodules。最后,我将包预安装脚本更改为git clone git://path/to/remote/repo,并将远程存储库目录的名称添加到.npmignore,现在一切正常。
    猜你喜欢
    • 2016-11-06
    • 2019-10-21
    • 1970-01-01
    • 2016-05-26
    • 2020-05-15
    • 1970-01-01
    • 2017-08-13
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多