之前本身寫一小項目時,webpack的配置基本就是一套配置,沒有考慮生產環境和開發環境的區分,最近在作一個複雜的商城項目接觸到了webpack的高級配置,通過兩天的研究,寫出了一份目前來講比叫滿意的配置,在這裏分享一下。node
衆所周知,webpack時基於node.js平臺運行的,要區分開發環境和生產環境還要存,node入手。咱們啓動webpack時,都須要輸入一些命令,npm run 、yarn start之類的,因此咱們就從命令行入手,告訴webpack,當前是什麼環境。react
{ "name": "webpac-demo", "version": "1.0.0", "description": "webpack練習", "main": "index.js", "scripts": { //配置開發環境參數。注意:真實開發中 package.json 文件中不能有註釋 "dev": "webpack --env=development", //配置生產環境參數 "dist": "webpack --env=production", "start": "webpack-dev-server --env=development" }, "dependencies": { "font-awesome": "^4.7.0", "react": "^16.2.0", "react-dom": "^16.2.0" }, "devDependencies":{ ... } }
這樣配置,當咱們在命令行輸入 npm run dev 和 npm run dist 時,就會附帶一些參數到命令行中,有了參數,咱們該如何拿到呢?那就要用到 node 的一個命令行參數解析引擎了。webpack
minimist輕量級的命令行參數解析引擎web
// test.js var args = require('minimist')(process.argv.slice(2)); console.log(args.hello); $ node test.js --env=production // production $ node test.js --env=development // development $ node test.js --env // true 注意:不是空字符串而是true
minimist會把參數解析成一個JSON對象:{key:value},有了這個JSON對象,咱們就能夠知道,當前的命令是要執行開發打包,仍是生產打包了。npm
// webpack.config.js const webpack = require('webpack'); //當前項目的絕對路勁 const path = require('path'); // 命令行參數解析引擎 const argv = require('minimist')(process.argv.slice(2)); let env = null; switch (argv.env) { case 'production': //生產環境配置文件名 env = 'webpack.config.prod'; break; default: //開發環境配置文件名 env = 'webpack.config.dev'; } console.log(`當前是 ${argv.env} 打包`); // 這時候,咱們就能夠加載相應的wabpack配置了。 module.exports = require( path.resolve( '加載的配置文件路勁',env ) );