vue-cli3打包時webpack優化

在項目打包上有兩個目標:減小打包代碼體積和加快打包速度javascript

1. 減小打包體積:html

(1)對於用的比較少的庫,能夠去掉(我去掉了jquery以及lodash),用到的地方,參考源碼本身寫vue

(2)非用不可的又比較大的庫(我這裏用了monaco-edit),使用cdn方式引入java

(3)按需加載jquery

(路由懶加載配合webpack'的require.ensure實現: 其實總的體積並沒變,可是會提升首頁加載速度)webpack

 

 

2. 加快打包速度:ios

這裏推薦一篇我的感受很棒的文章 https://juejin.im/post/5bfa696d51882579117f7d26web

我目前作了這些:vue-router

(1)vue-cli2升級到vue-cli3,順便webpack2升級到webpack4,構建速度一會兒從3分鐘左右提高到不到1分鐘(vue-cli3升級過程 https://www.cnblogs.com/XHappyness/p/9989693.html)vuex

(2)使用 DllPlugin 進行預編譯,過程以下:

·    npm install webpack-cli --save-d 

·    獨立出一套webpack配置webpack.dll.conf,用dllPlugin定義要打包的dll文件;這裏我在根目錄下新建webpack.dll.conf.js  內容以下

const path = require("path");
const webpack = require("webpack");

module.exports = {
  entry: {
    vendor: [
      "vue-router/dist/vue-router.esm.js",
      "vuex/dist/vuex.esm.js",
      "axios"
    ]
  },
  output: {
    path: path.join(__dirname, "public/vendor"),
    filename: "[name].dll.js",
    library: "[name]_[hash]" // vendor.dll.js中暴露出的全局變量名
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, "public/vendor", "[name]-manifest.json"),
      name: "[name]_[hash]",
      context: process.cwd()
    })
  ]
};
View Code

注意;在vue-cli3中必定要把生成的dll放到public中或者本身去配置 publicPath (沒仔細看文檔掉進坑)

·    package.json中定義運行webpack.dll.conf.js的命令

{
···
  "scripts": {
    "serve": "npm link typescript && vue-cli-service serve",
    "dll": "webpack -p --progress --config ./webpack.dll.conf.js",
···
  },
···
}

·    運行npm run dll命令生成dll

·    index.html中加載生成的dll文件

<script src="./vendor/vendor.dll.js"></script>

·    以上已經完成預編譯並載入;可是必定不要忘記webpack構建時告訴webpack哪些文件已被預編譯,使構建過程忽略這些已預編譯的文件;

具體作法就是在vue.config.js的配置文件中添加

const webpack = require("webpack");


module.exports = {
···
  configureWebpack: {
    plugins: [
      new webpack.DllReferencePlugin({
        context: process.cwd(),
        manifest: require("./public/vendor/vendor-manifest.json")
      })
    ]
  }
···
}

  

 (3) happyPack多線程打包

相關文章
相關標籤/搜索