2017-03-01 84 views
0

TL; DR如何在模塊化項目中配置不同的「子模塊」以儘可能簡單地相互引用?節點/ NPM管理本地包

我試圖圍繞NPM的本地包裹頭,特別是因爲他們涉及到一個模塊化項目。

我正在構建一個具有前端和後端API的Web應用程序。這些需要共享一個輸出簡單模型的包。我的項目目錄結構是這樣的:

package 
├── api 
│   ├── dist 
│   │   └── <compiled files> 
│   ├── node_modules 
│   │   └── ... 
│   ├── package.json 
│   └── src 
│    └── <source files> 
├── application 
│   ├── dist 
│   │   └── <compiled files> 
│   ├── node_modules 
│   │   └── ... 
│   ├── package.json 
│   └── src 
│    └── <source files> 
└── models 
   ├── dist 
    │   └── <compiled files> 
   ├── node_modules 
   │   └── ... 
   ├── package.json 
   └── src 
    └── <source files> 

這兩個API和應用項目將使用模型,所以我抽象我的項目中的代碼到一個單獨的子模塊。

我已閱讀npm link的文檔,這似乎是正確的方法,因爲據我瞭解,它符號鏈接node_modules目錄中的程序包。這樣可以訪問現在存在的代碼,而不是在node_modules中安裝副本。聽起來像我需要的,但有一個皺紋:我正在從幾個不同的地方開展這個​​項目:我的筆記本電腦,我的辦公室在工作,偶爾從家裏。此外,其他人將在未來爲這個項目做出貢獻。

我想盡可能簡單地讓一個新的貢獻者在開發中運行起來並運行。

目前,一種新的貢獻者會經過以下步驟:

  1. 克隆庫
  2. cd到車型目錄
    1. 運行npm install
    2. npm link
  3. cd到API DIR
    1. 運行npm install
    2. npm link models
  4. cd到應用程序目錄
    1. 運行npm install
    2. npm link models
  5. 開工

我想什麼做的(我認爲npm應該是能夠做到的事情)是:

  1. 克隆庫
  2. cd到車型目錄
    1. 運行npm install
  3. cd到API目錄
    1. 運行npm install
  4. cd到應用程序目錄
    1. 運行npm install
  5. 開工

我可以寫一個腳本來做到這一點,但它似乎是一個明顯的用例npm,我懷疑它可能能夠做到這樣的事情。我想我可能會忽略一些東西,因爲我沒有在文檔中找到它。

+0

真的需要有三個獨立的'package.json'嗎?你不應該只創建一個主'json'文件嗎?我還沒有處於需要的狀態 –

+0

爲什麼? NPM已經爲你做了重複數據刪除。如果這是一個項目,則不需要三個package.json文件,只需使用一個。另一方面,如果這三個獨立項目是獨立的並且可以各自獨立發佈,那麼好消息是:npm已經可以自動爲您執行基於鏈接的重複數據刪除。 –

+0

Re:多個package.json文件 - 最終,這些代碼將在多個docker容器中運行,我正在尋找一種方法來確保安裝不必要的依賴關係。例如,如果API容器需要應用程序容器沒有的依賴項,這似乎是避免將其安裝在不需要的地方的最簡單方法。 – Kryten

回答

1

可能有更好的方法來解決這個問題,但..

一種可能性是創建項目中,負責處理所有項目的初始化的根package.json

package 
├── package.json 

而且package.json的內容沒有依賴性,但腳本使用剛剛npm installpackage目錄下的所有子模塊的鏈接和安裝依賴。

如果你把一個package.jsonpackage文件夾下面

{ 
    "name": "package-name", 
    "version": "1.0.0", 
    "description": "Some description", 
    "scripts": { 
    "init-models": "cd ./models && npm install && npm link", 
    "init-api": "cd ./api && npm install && npm link", 
    "init-app": "cd ./application && npm install && npm link", 
    "postinstall": "npm run init-models && npm run init-api && npm run init-app" 
    } 
} 

你只需要npm install初始化整個項目。