在npm包中使用非npm-package git子模块

时间:2013-03-07 19:10:21

标签: git node.js npm git-submodules

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

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

由于外部依赖不是npm包(也不是节点模块),我认为我不能使用npm submodule命令,因此我在package.json中提出了this预安装脚本文件:

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

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

You need to run this command from the toplevel of the working tree.

我也尝试过(正如错误信息所说):

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

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您下载的npm一旦解压缩,就不再包含git信息(无.git目录)。

所以没有git命令可以这样工作,但是因为你有git信息而在本地工作。

对于解决方案,您可能必须创建一个执行npm pack执行操作的脚本,但不会忽略子模块。

不是我尝试过的东西,但是这个脚本https://github.com/Kentzo/git-archive-all可以开箱即用

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

可能需要一些调整......