2013-12-10 79 views
3

我正在構建兩個互相依賴的私有npm包。如何自動鏈接本地npm包?

說我:

project 
    /my-commons 
    package.json : 
    { 
     name : "my-commons", 
     version : "0.0.1" 
     ... 
    } 

    /my-server 
    package.json : 
    { 
     dependencies : { 
      "my-commons" : "0.0.1" 
     } 
    } 

我可以使用「故宮鏈接」安裝「公共」包。所以,任何人都願意 開始在服務器上的工作需要做:

  • 結算項目
  • CD我的服務器
  • NPM鏈接../my-commons
  • NPM安裝

並且在/ my-server/node_modules中添加了../my-commons的符號鏈接,並且一切正常。

有但是辦法告訴NPM那是我的公地'包將總是是夾在那裏,所以你可能只是這樣做:

  • 結算項目
  • CD我-server
  • NPM安裝

還是我缺少明顯的東西嗎?

謝謝

回答

2

也許吧。

但首先:如果my-commons需要my-server那麼即使它是多餘的,最好保留在my-server/node_modules之內。在大多數情況下,最好將模塊的依賴關係與應用程序的其餘部分隔離開來。

在這種情況下,您可以在開發過程中使用npm link,當時您正在使用my-commons並且想要使用my-server中的更改,而不必使用npm publish my-commons

在生產中,您不會希望使用npm link,因爲從屬模塊將失去對最終鏈接模塊版本的控制權。如果my-server取決於my-commons 0.1.0,但是您的npm link編輯了您的1.01版本的my-commons模塊,那麼所有地獄都可能崩潰。

但是,自1.2.10版(與節點0.8.19一起發貨)NPM支持對等體依賴關係。 同位體依賴關係允許您指定my-server要求my-commons「除」my-server之外「安裝」。這樣做不是使您能夠require("my-commons")my-server之內但如果my-servermy-commons的插件可能會有用。 欲瞭解更多信息:http://blog.nodejs.org/2013/02/07/peer-dependencies/

最後,既然你說你正在開發私人包:如果安裝的軟件包是什麼原因造成你的麻煩,因爲你不能發佈你的包向公衆NPM註冊表,看看替代的方式來指定依賴項(git-,http-URLs,TGZ文件):https://docs.npmjs.com/files/package.json#dependencies

+0

謝謝,我的用例是你描述的,所以在實踐中我真的想要我的服務器/節點-modules/my-commons;我的問題只是:「有沒有辦法寫'my-server/package.json',以便開發者不必運行'npm link'」。純粹的懶惰,我知道... – phtrivier