2017-07-02 57 views
4

create-react-app創建新項目並運行yarn ejectcreate-react-app install devDependencies in dependencies部分

我的package.json的依賴關係部分看起來是這樣的:

"dependencies": { 
    "autoprefixer": "7.1.1", 
    "babel-core": "6.25.0", 
    "babel-eslint": "7.2.3", 
    "babel-jest": "20.0.3", 
    "babel-loader": "7.0.0", 
    "babel-preset-react-app": "^3.0.1", 
    "babel-runtime": "6.23.0", 
    etc. 

我會說這些都是devDependencies爲什麼創建反應的應用程序內放置他們在這裏?

回答

9

這是對最新版本之一的有意更改。

對於生成靜態包的前端應用程序來說,這種區別是相當隨意的。從技術上講,你不需要任何這些依賴關係在服務器上,甚至不需要運行時。所以通過這種邏輯,即使react可能被視爲開發依賴。

我們曾嘗試將它們分開,但如上所述,首先它並不是真正一致的。沒有技術上的原因,爲什麼這種區別對沒有節點運行時的應用程序有用。此外,它還會導致一些Heroku部署出現問題,這些部署沒有安裝開發依賴項(因此無法在服務器上構建項目或在部署之前對其進行測試)。

最後我們把所有東西都放到了依賴關係中。如果您不同意,您可以按照您認爲合理的方式重新排列package.json

+1

但是,這是否意味着所有的devDependencies都會在生產版本中生成,並通過應用程序代碼進行部署?增加封裝尺寸 – dagda1

+0

>沒有技術上的原因可以說明,這種區別對於沒有節點運行時的應用程序很有用。 devDeps和deps在兩個完全獨立的環境中運行,並且保持兩個隔離可以溝通/記錄哪些deps在野外運行並且正在CI /受信任環境中運行。這在評估安全性問題時非常有用。 – Bret

1

這些都是開發依賴關係,如果你正在建立的應用程序是一個庫,你想發佈其他人使用。

基本上我的理解是這樣的,如果你有一個可以以兩種方式使用的模塊:通過克隆項目

在這種情況下開發

  • 通過npm i
  • 消耗,把它們放在開發依賴中是有道理的。

    在你的情況下,人們將克隆你的項目進行開發。並通過託管一個消費。

    希望這會有所幫助。

相關問題