• vue-cli3打包时webpack优化


    在项目打包上有两个目标:减少打包代码体积和加快打包速度

    1. 减少打包体积:

    (1)对于用的比较少的库,可以去掉(我去掉了jquery以及lodash),用到的地方,参考源码自己写

    (2)非用不可的又比较大的库(我这里用了monaco-edit),使用cdn方式引入

    (3)按需加载

    (路由懒加载配合webpack'的require.ensure实现: 其实总的体积并没变,但是会提高首页加载速度)

    2. 加快打包速度:

    这里推荐一篇个人感觉很棒的文章 https://juejin.im/post/5bfa696d51882579117f7d26

    我目前做了这些:

    (1)vue-cli2升级到vue-cli3,顺便webpack2升级到webpack4,构建速度一下子从3分钟左右提升到不到1分钟(vue-cli3升级过程 https://www.cnblogs.com/XHappyness/p/9989693.html)

    (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多线程打包

  • 相关阅读:
    Oracle 定时查询数据插入新表中(job+存储过程)
    serialVersionUID的作用
    如何解决"The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path"
    如何解决maven archetype加载太慢的方法
    Java中NIO、BIO、AIO相关概念及应用场景
    Sql多条件排序
    Oracle学习笔记—Oracle左连接、右连接、全外连接以及(+)号用法(转载)
    Oracle学习笔记—oracle体系架构及状态(nomount、mount和open)简介
    Oracle学习笔记—归档模式
    Oracle学习笔记—Db_name、Db_domain、Global_name、Service_name、Instance_name和Oracle_SID(转载)
  • 原文地址:https://www.cnblogs.com/XHappyness/p/10343010.html
Copyright © 2020-2023  润新知