vue打包优化一

news/2024/9/21 23:24:01

webpack.dll.config.js配置

相关文章
https://www.cnblogs.com/echoyya/p/16413591.html

步骤一:创建webpack.dll.config.js(不一定要是这个名字,只要执行指令的时候路径正确就行)

// webpack.dll.config.js
const path = require('path')
const webpack = require('webpack')
var vendors = [
  'axios',
  'vue',
  'vue-router',
  'vuex',
  './public/mapData/china.js'
]
module.exports = {
  entry: {
    vendor: vendors
  },
  output: {
    path: path.join(__dirname, '/dll'),
    // 输出的动态链库的文件名称,[name]代表当前动态连接库的名称
    filename: '[name].dll.js',
    library: '[name]_[hash]'
  },
  plugins: [
    new webpack.DllPlugin({ // webpack内置的插件,不需要额外安装
      path: path.join(__dirname, '/dll', 'manifest.json'),
      // 动态链接库的全局变量名称,需要和 output.library中保持一致
      // 该字段的值也就是输出的 manifest.json文件中 name字段的值
      context: __dirname,
      name: '[name]_[hash]'
    })
  ],
   performance: {
        hints: false
    }
}

步骤二:在package.json中添加快捷命令(./webpack.dll.config.js这边的路径对就行)

  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "dll": "webpack --config ./webpack.dll.config.js"
  },

步骤三、执行dll命令,成功后出现以下内容

在这里插入图片描述

步骤四、在vue.config.js中引入manifest.json依赖关系,并将 dll.js引入html页面

安装插件

npm install html-webpack-include-assets-plugin --save-dev
const TerserPlugin = require('terser-webpack-plugin')
const webpack = require('webpack')
const path = require('path')
const HtmlWebpackIncludeAssetsPlugin = require('html-webpack-include-assets-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = {
  ...
  publicPath: process.env.VUE_APP_BASE,
  productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
  configureWebpack: () => ({
    plugins: [
      // 引入manifest.json依赖关系
      new webpack.DllReferencePlugin({
        context: __dirname,
        manifest: require('./dll/manifest.json')
      }),
      // 将vendor.dll.js复制到js目录下
      new CopyWebpackPlugin([
        {
          from: path.resolve(__dirname, 'dll/vendor.dll.js'),
          to: 'js'
        }
      ]),
      // 将 dll 注入到 生成的 html 模板中
      new HtmlWebpackIncludeAssetsPlugin({
        assets: ['./js/vendor.dll.js'],
        append: false
      })
    ],
    optimization: {
      minimizer: [
        new TerserPlugin({
          terserOptions: {
            compress: {
              drop_console: true, // 传true就是⼲掉所有的console.*这些函数的调⽤.
              drop_debugger: true, // ⼲掉那些debugger;
              pure_funcs: ['console.log'] // 如果你要⼲掉特定的函数⽐如console.info ,⼜想删掉后保留其参数中的副作⽤,那⽤pure_funcs来处理
            },
            // 开启缓存
            cache: true,
            // 开启多进程打包
            parallel: true,
            // 启动source-map
            sourceMap: false
          }
        })
      ]
    }
  })
  ...
}

附一个函数式写法
在这里插入图片描述

注:
1、copy-webpack-plugin好像webpack自带,要是没的话,也可以安装,看了别的博文,建议6.0.4
2、我看别人引入vendor.dll.js文件是直接在index.html下直接引入的,类似下图,但是我打包发布之后一直报错,就没用了
在这里插入图片描述
在这里插入图片描述

步骤五、打包发布

以下是一些dll报错记录:

1、dll命令报错[webpack-cli] Error: DllPlugin: supply an Array as entry

在这里插入图片描述
但是我的vendors明明是数组,很不理解
在这里插入图片描述

看了源码,打印了一下item
在这里插入图片描述
发现item打印出来不是[axios,vue,vue-router,vuex],而是{import:[axios,vue,vue-router,vuex]}

解决方法:开发环境安装webpack-cli

在这里插入图片描述
我试了更高版本的webpack-cli,是5.0.1+,但是报错了(报错如下),所以用的webpack-cli 4.9.2

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/407225.html

相关文章

分布式光伏发电计及气象因子及出力预测方法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

spring中i18n国际化处理多语言

前言 在项目中,往往用户会存在多语言的述求,比如说一个系统既有中文的用户,又有英文的用户。怎么来实现多语言呢? 首先前后端分离的项目,前端会有自己的多语言实现方案,大致效果就是,用户切换…

(四)本地镜像发布到阿里云将阿里云上的镜像下载到本地

目录 一、阿里云ECS docker生态 二、镜像生成 三、阿里云容器镜像服务 四、推送镜像到阿里云registry 五、将阿里云上的镜像拉取到本地 一、阿里云ECS docker生态 二、镜像生成 使用commit命令,在(三)深度理解Docker分层(Uni…

24岁程序媛实现了人生第一个小目标 | 2022年终总结

前言 大家好,我是伊人a。2022这一年我实现了人生中的第一个小目标-25岁前能够全款拿下宝马3系。耶比耶比🎉🎉🎉 2022年我是一个满眼星辰的的攀登者。 满眼星辰指的是我对未来充满希望且笃定不移, 攀登者指的是我在…

Java8 新特性——日期时间

Java8之前,日期时间:java.util.Date是可变类型,SimpleDateFormat非线程安全 旧版的 Java 中日期时间 API 问题: 非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的。 设计很差 − Java的日期/时间…

SparkSQL数据源

第1关:SparkSQL加载和保存 任务描述 本关任务:编写一个SparkSQL程序,完成加载和保存数据。 相关知识 为了完成本关任务,你需要掌握: 加载数据 直接在文件上运行SQL 保存到路径 保存模式介绍 保存到持久表 存储和排序或分区 加载数据 DataFrameReader用于从外部存…

非零基础自学Golang 第2章 安装和运行Go 2.6 编写第一个Go 程序

非零基础自学Golang 文章目录非零基础自学Golang第2章 安装和运行Go2.6 编写第一个Go 程序2.6.1 GoLand 编写2.6.2 文本编辑器编写2.7 小结第2章 安装和运行Go 2.6 编写第一个Go 程序 Go和GoLand安装完成后,我们可以使用Go语言来编写我们的第一个程序——Hello wo…

【图像融合】高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】

⛄一、区域分割图像融合简介 图像的分解 对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解。 1 高斯金字塔分解 记源图像为G0,G0即为高斯金字塔最底层,将其进行高斯低通滤波,之后对其进行隔行隔列的下…