2013-03-07 135 views
3

如何在安裝前在我的軟件包中更新非-npm-package包?在npm軟件包中使用非npm-git子模塊

我正在使用git並且有一個node.js模塊,它依賴於也託管在git存儲庫中的外部項目。我將外部項目添加爲子模塊,現在我試圖製作一個npm包。

由於外部的依賴是不是NPM包(也不是一個節點模塊),我想我不能使用npm submodule命令,所以我在package.json文件提出了this前腳本:

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

當我在包目錄下執行npm install,它工作正常,但是當我試圖直接從我的遠程git倉庫或npm pack作出的壓縮包安裝包,我得到以下錯誤:

 
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

您下載的npm一經提取,不再包含git信息(無.git目錄)。

所以沒有git命令會以這種方式工作,但在本地工作,因爲你有git信息。

至於解決方案,您可能必須創建一個腳本,它執行npm pack所做的操作,但不會忽略子模塊。

不是我試過,但這個腳本https://github.com/Kentzo/git-archive-all可能是工作了的東西的盒子狀

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

可能需要一些調整...

+0

你確定所提取的包不有'.git'目錄?如果是這樣,我應該能夠在那裏啓動'git'回購,因爲'.gitmodules'已經存在,我可以簡單地更新git'submodules'。 – fardjad 2013-03-08 10:00:53

+0

我確定.git不是'npm pack'生成的檔案文件的一部分。運行'git init'可能會起作用。值得一試。作爲npm消費者,我不確定我想爲給定版本獲得不同的代碼,但是如果這是供您自己使用的,並且您沒有問題,那麼確定。 – 2013-03-08 10:17:37

+2

我試過'git init',它初始化了一個空的git倉庫。但我不得不再次手動添加子模塊;似乎在repository中有'.gitmodules'對於'git'來識別'submodules'是不夠的。最後,我將我的軟件包預安裝腳本更改爲'git clone git:// path/to/remote/repo',並且將遠程倉庫目錄的名稱添加到'.npmignore'中,現在一切正常。 – fardjad 2013-03-08 12:48:16