2017-07-18 230 views
12

我在我的項目中使用TypeScript 2。我想使用一些js庫,但也需要使用該庫。我可以用簡單的npm install @types/some-library安裝類型。我不知道我是否應該--save--save-dev他們。在我看來,即使DefinetelyTyped GitHub自述類型提到了兩種版本,但從來沒有解釋它們。我認爲@types應該在devDependencies中,因爲開發需要類型,並且不會在運行時使用,但我在dependencies中看到了很多次@types。我很困惑。如何判斷@ types/*是否進入依賴關係或devDependencies?

如何判斷@ types/*是否進入dependenciesdevDependencies?實際上是否有一些或多或少的官方指示?

+0

您是生成一個包還是這個包會被其他人使用?正如我所看到的,在後一種情況下,您只需要區分'dependencies'和'devDependencies'。 – Valentin

+0

我從頭開始在js/ts中製作一些遊戲。我用webpack捆綁所有東西。 atm沒有後端,但有可能我會將它全部封裝在Electron中,以便有一天它可以獨立運行。我認爲任何人都不會將它用作他們自己的應用程序的依賴,但我想這可能是可能的(想想GTA遊戲中的迷你遊戲;我的遊戲是開源的)。不過,我想學習並遵循最佳做法,這是我製作該遊戲的主要原因。我希望我能夠很好地澄清我的用例。 :) – kamyl

+1

是的,它是有道理的,只是想確保我的原始答案與您的使用案例相關。我仍然認爲'devDependencies'和'dependencies'之間的區別在構建一個bundle時是無關緊要的,它也是'create-react-app'強制執行的東西[https://stackoverflow.com/a/44872787/1333383 )但最終取決於你選擇 – Valentin

回答

11

假設你正在開發一個包含devDependencies中的@ types/some-module軟件包的軟件包「A」。出於某種原因,你從@類型/一些模塊輸出類型

import {SomeType} from 'some-module'; 
export default class APackageClass { 
    constructor(private config: SomeType) { 

    } 
} 

眼下打字稿消費者包裝的「A」是無法猜測SOMETYPE是什麼,因爲包devDependencies「A」未安裝。

在這種特殊情況下,您需要將@ types/*包與常規的「依賴關係」放在一起。對於其他情況,「devDependencies」已經足夠好了。

+1

所以你暗示,如果我只在實現中使用類型,它的類型定義可以是'devDependencies'? –

+1

是@FranklinYu。只要類型出現在聲明文件中,就需要將它放在'dependencies'上。否則'devDependencies'很好 – wookieb

6

您是否正在生成捆綁包?如果是這樣,我建議不要花太多時間辯論什麼地方。 devDependenciesdependencies僅在您發佈可供其他人使用的軟件包且您不希望以無用的依賴關係發送垃圾郵件時纔有意義。

TL; DR將它放入devDependencies。就像你說的「開發所需的類型,不在運行時使用」

相關問題