2017-04-20 28 views
0

在我package.json我運行一個腳本,像這樣:包JSON腳本運行多個環境變量

"build-dev": "webpack-dev-server --content-base src --inline --hot -p --define process.env.NODE_ENV='\"dev\"' --progress --colors -p --define process.env.REACT_APP_GAMESHOW_URL='\"http://api.gameshow.com/contestants\"' --progress --colors" 

和它的作品。

基本上我只是想的WebPack運行,並定義一些環境變量:

webpack-dev-server --content-base src --inline --hot 

process.env.NODE_ENV=dev 

process.env.REACT_APP_GAMESHOW_URL=http://api.gameshow.com/contestants 

但是,我用這些參數多次:-p --define --progress --colors

有沒有一種方法,我可以凝結代碼,所以它不重複?

喜歡的東西:

-p --define process.env.NODE_ENV='\"dev\"' && process.env.REACT_APP_GAMESHOW_URL='\"http://api.gameshow.com/contestants\"' --progress --colors" 

我嘗試了一堆東西,但他們沒有工作

回答

1

重複標誌像--progress--colors沒有做任何事情,這是一樣的,如果你有隻用過一次。 --define選項可以多次使用來定義多個值,並且完全獨立於您使用的任何其他標誌/選項。

除了使用命令行選項外,還可以在webpack配置中定義這些選項。等效DefinePlugin是:

plugins: [ 
    new webpack.DefinePlugin({ 
    'process.env': { 
     NODE_ENV: JSON.stringify('dev'), 
     REACT_APP_GAMESHOW_URL: JSON.stringify('http://api.gameshow.com/contestants'), 
    } 
    }) 
] 

因爲它只是JavaScript的,這也可以讓你用JSON.stringify()它擺脫了繁瑣的轉義,並使用引號內的報價。根據您的環境有幾種可能性來更改這些值。

例如,您可能只需要發展一個網址,一個用於生產,所以你可以做的東西沿着這些路線:

注意它總是檢查是否NODE_ENVproduction,所以如果你根本沒有定義NODE_ENV,你默認爲開發值,在開發過程中刪除另一個命令行選項。有了這個配置,你可以運行發展中的以下內容:

webpack-dev-server --content-base src --inline --hot --progress --colors 

而對於生產,你只需要添加NODE_ENV=production-p

NODE_ENV=production webpack-dev-server -p --content-base src --inline --hot --progress --colors 

不要使用發展-p,這是生產的國旗和在開發中使用絕對沒有幫助。有關更多信息,請參閱Building for Production

如果您願意,還可以配置您當前在命令行上指定的其他選項,例如stats.colorsdevServer.contentBase