webpack深刻場景——開發環境和生產環境

之前本身寫一小項目時,webpack的配置基本就是一套配置,沒有考慮生產環境和開發環境的區分,最近在作一個複雜的商城項目接觸到了webpack的高級配置,通過兩天的研究,寫出了一份目前來講比叫滿意的配置,在這裏分享一下。node

如何區分開發環境和生產環境?

衆所周知,webpack時基於node.js平臺運行的,要區分開發環境和生產環境還要存,node入手。咱們啓動webpack時,都須要輸入一些命令,npm run 、yarn start之類的,因此咱們就從命令行入手,告訴webpack,當前是什麼環境。react

  • package.json
{
    "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

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 ) );

下一篇,說說開發環境和生產環境的配置詳細狀況。

相關文章
相關標籤/搜索