1. 程式人生 > >react專案實戰(許可權模組開發八)js檔案分開打包

react專案實戰(許可權模組開發八)js檔案分開打包

才開發幾個介面就發現打包出的index.js檔案就有700多kb了,由於部分外掛的js檔案是不會變化的,單獨打包可以充分利用瀏覽器的快取功能。

第一步:在專案跟目錄下面新增一個webpack.config.js檔案

這裡寫圖片描述

第二步:為了將原有的js分開打,需要修改entry的指定.。由於我的專案用到了jquery,所以將jquery單獨達成一個獨立檔案,再將react的相關元件打包成vendors.js。

webpackConfig.entry={
    "index": "./src/index.js",
    vendor: vendors,
    jquery:["jquery"]
  }

第三步:指定外掛引用資訊:

  webpackConfig.plugins.push(new webpack.optimize.CommonsChunkPlugin({
    names: ["jquery","vendor"],
    minChunks: Infinity
  }));

config檔案的全部內容如下:


var path = require('path');
var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, 'src/');
var webpack=require
('webpack'); var CompressionWebpackPlugin = require('compression-webpack-plugin'); const vendors = [ 'react', 'react-dom', 'react-redux', 'react-router', 'react-router-redux', 'redux', ]; //將jquery單獨打包,將react的相關元件單獨打包 module.exports = function (webpackConfig, env) { webpackConfig.entry={ "index"
: "./src/index.js", vendor: vendors, jquery:["jquery"] } webpackConfig.plugins.push(new CompressionWebpackPlugin({ //gzip 壓縮 asset: '[path].gz[query]', algorithm: 'gzip', test: new RegExp( '\\.(js|css)$' //壓縮 js 與 css ), threshold: 10240, minRatio: 0.8 })); webpackConfig.plugins.push(new webpack.optimize.CommonsChunkPlugin({ names: ["jquery","vendor"], minChunks: Infinity })); return webpackConfig; }

這裡是將js檔案再壓縮成gzip格式。

  webpackConfig.plugins.push(new CompressionWebpackPlugin({ //gzip 壓縮
    asset: '[path].gz[query]',
    algorithm: 'gzip',
    test: new RegExp(
      '\\.(js|css)$'    //壓縮 js 與 css
    ),
    threshold: 10240,
    minRatio: 0.8
  }));

第四步:修改下public/index.html檔案內容,因為我們將相應外掛是單獨打包自然我們需要額外的引用相應的js檔案,注意要將vendor.js放在第一位,如果把jquery放在第一位,會報錯誤

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Dva Demo</title>
  <link rel="stylesheet" href="index.css" />
</head>
<body>

<div id="root"></div>

<script src="vendor.js"></script>
<script src="jquery.js"></script>
<script src="index.js"></script>

</body>
</html>

ok可以啟動試試,執行下 npm run build看下打包的結果:

這裡寫圖片描述