1. webpack設定開發模式和生產模式
(1). DefinePlugin外掛設定
new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '"production"' }, __DEV__: false }) new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify('production') }, __DEV__: false }) new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"', __DEV__: false })
(2). 命令列設定
"scripts": { "watch": "cross-env NODE_ENV=production ....." }
2. 開發模式和生產模式指令碼區分執行
if(process.env.NODE_ENV == 'development'){ console.log('development'); } else{ console.log('production'); } if(__DEV__){ console.log('development'); } else{ console.log('production'); }
以上程式碼不必擔心在瀏覽器中會不相容,webpack會將其編譯為一個bool值:
if(true){ console.log('development'); } else{ console.log('production'); } if(false){ console.log('development'); } else{ console.log('production'); }
如果使用了UglifyJsPlugin,則會編譯為:
console.log('development');
console.log('production');
完全不會增加多餘的程式碼,不會增大線上檔案體積,所以可以放心使用。
3. html頁面注入環境變數
在htmlWebpackPlugin中新增環境變數env的配置
new HtmlWebpackPlugin({ template: './src/public/index.ejs', inject: 'body', hash: true, env: process.env.NODE_ENV })
在html頁面中可以這樣使用
<% if(htmlWebpackPlugin.options.env == 'production'){ %> <script src="xxx/react.min.js"></script> <script src="xxx/react-dom.min.js"></script> <% } else { %> <script src="xxx/react.development.js"></script> <script src="xxx/react-dom.development.js"></script> <% } %>
通常情況下,開發模式hash為false,生成模式hash為true,也可以用hash這個變數來區分環境
<% if(htmlWebpackPlugin.options.hash){ %> <script src="xxx/react.min.js"></script> <script src="xxx/react-dom.min.js"></script> <% } else { %> <script src="xxx/react.development.js"></script> <script src="xxx/react-dom.development.js"></script> <% } %>