2016-04-22 58 views
0

有沒有一種方法來創建一個元包,package.json加盟發展NPM的依賴關係到單個元包

一)包含依賴關係,未用於構建這種 包的列表;

B)強制NPM安裝這些DEPS,在這個非常 元包添加到項目,既爲生產的發展?

問題是我的樣板文件中有幾十個包(prod和dev),我從一個項目複製到另一個項目。我想有一個私人包,一旦添加到項目的package.json告訴npm哪些其他prod和dev deps安裝。我想改進使用樣板的過程,因爲當我改變它的樣子時,我已經(實際上這是我的意願,而不是執行)在這個樣板的基礎上構建的所有項目中進行這些更改,仍在發展中。

我已經成功地將我通常使用的所有代碼添加到我的元包package.jsonproduction部分。然而,有兩個問題的方法:

了很多不必要的包在安裝時我建立的元包(我有,因爲它包含了一些ES6助手/ 7建造它);

2.我仍然需要在每個新項目中複製/粘貼生產項目清單,以提供NPM信息,以及在生產服務器上安裝的內容。

非npm解決方案也是受歡迎的。

回答

1

嗯,這似乎是很容易做到:

首先,需要分割的樣板中使用的所有的包分成兩組 - 運行應用所需的(production ),並且需要構建和調試(development)。

2.創建production元包(meta-prod)。 package.json內容:

... 
"dependencies": { 
    < Here we have the list of production dependencies.  > 
}, 
... 

如有必要編譯它,並推送到git(即,github)。

3.創建development元包(meta-dev)。 package.json內容:

... 
"dependencies": { 
    < Here we have the list of development dependencies.  > 
    < Please note, that this is in the 'dependencies' section, > 
    < not the 'devDependencies'.        > 
}, 
... 

把它推到git。

4.從樣板的package.json刪除所有的依賴,取而代之的是:

... 
"dependencies": { 
    "meta-prod": "git+https://github.com/your_account/meta-prod" 
}, 
"devDependencies": { 
    "meta-dev": "git+https://github.com/your_account/meta-dev" 
}, 
... 

這就是它!當您執行npm install時將會安裝相關性,npm將適當考慮作爲生產和開發。現在,您可以使用更小的package.json樣板,並從單點更新您的開發人員列表。

唯一的缺點是,npm當你使用包從git,所以更新你必須從node_modules並重新運行npm install刪除元包目錄內的應用程序包不趕的版本變化。要解決這個問題,你可以將你的軟件包發佈到npmjs.com(如果你是付費npm客戶,最好將它發佈爲私有軟件包),並且每次更新時都要更改元軟件包版本。

這裏是樣板和元套餐例如:

+0

,你才能使用依賴的依賴?每個包都有自己的依賴副本(因此不允許使用遞歸安裝的依賴關係),NPM的意義何在? –

+0

由於版本3'npm'確實打包了[flattening](https://docs.npmjs.com/how-npm-works/npm3)並將它們全部安裝到了上層'node_modules'目錄中,直到子依賴關係不相互衝突。所以,是的,可以使用這種方法來使用子依賴關係。當然,缺點是這是讓他們進入你的項目的隱含方式。 –