vue.config.js配置详解

2023-10-30

1. vue inspect --rule  命令获取vue.config.js中的chainWebpack配置项

2. vue inspect --rule svg 筛选配置项·

const path = require("path");

function resolve(dir) {

    return path.join(__dirname, dir);

}

const port = 8080; // 端口号

const IS_PRODUCTION = process.env.NODE_ENV == "production"; // 正式环境

const CompressionPlugin = require("compression-webpack-plugin");

const UglifyJsWebpackPlugin = require("uglifyjs-webpack-plugin");

/** key 是import 的包名,value 是CDN 为我们提供的全局变量名 */

const externals = {

    "ali-oss": "OSS"

};

module.exports = {

    // 放在服务器根目录下面的<服务器上项目所在的文件夹名>

    publicPath: "/",

    assetsDir: "static", // 输出的资源,所在的文件夹

    /** 去掉hash */

    filenameHashing: false,

    // 配置vscode调试工具

    configureWebpack: {

        devtool: 'source-map'

    },

    chainWebpack: config => {

        config.resolve.alias

            .set("@", resolve("src"))

            .set("assets", resolve("src/assets"))

            .set("components", resolve("src/components"))

            .set("views", resolve("src/views"));

        /** 如果是正式环境 */

        if (IS_PRODUCTION) {

            // 解决ie11兼容ES6

            config.entry("main").add("babel-polyfill");

            /** 删除懒加载模块的 prefetch preload,降低带宽压力(使用在移动端) */

            config.plugins.delete("prefetch").delete("preload");

            /** 阿里云SDK --不打包 */

            config.externals(externals);

            /** gzip 压缩 */

            config

                .plugin("compressionPlugin")

                .use(CompressionPlugin)

                .tap(() => [

                    {

                        test: /\.js$|\.html$|\.css/, //匹配文件名

                        threshold: 10240, //超过10k进行压缩

                        deleteOriginalAssets: false //是否删除源文件

                    }

                ]);

            /** 去掉console.log debugger sourceMap*/

            config.optimization.minimizer([

                new UglifyJsWebpackPlugin({

                    /**这个 sourceMap注释掉,默认就是置为false.(写为false 也是可以的)。

                     * 反之设为true 是生效的。

                     * 故在官方的配置(productionSourceMap: false)就可以注释掉了*/

                    sourceMap: false,

                    uglifyOptions: {

                        warnings: false,

                        compress: {

                            drop_console: true,

                            drop_debugger: true

                        }

                    }

                })

            ]);

            config.optimization.splitChunks({

                chunks: 'all',

                cacheGroups: {

                    elementUI: {

                        name: 'chunk-elementUI', // split elementUI into a single package

                        priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app

                        test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm

                    }

                }

            });

        }

        /** 有此插件就不用了去,图片压缩网站压缩图片了 */

        /** png、jpg图片压缩有效--已测试 jpg图片压缩图片质量变差*/

        config.module

            .rule("images")

            .use("image-webpack-loader")

            .loader("image-webpack-loader")

            .options({

                bypassOnDebug: true

            })

            .end();

        /** 文件名称hash 三种规则 */

        /**hash chunkhash contenthash */

        // config.output.filename("[name].[contenthash].js").end();

    },

    devServer: {

        port: port, // 端口号

        host: "10.13.5.21",

        https: false, // https:{type:Boolean}

        open: false, //配置自动启动浏览器

        overlay: {

            warnings: false,

            errors: true

        },

        proxy: 'http://10.13.5.192:8091'

        // proxy: 'http://10.13.5.155:8081'

        // proxy: 'http://10.13.5.150:8081'

        // proxy: 'http://shyboy.ngrok2.xiaomiqiu.cn'

    },



    css: {

        loaderOptions: {

            stylus: {

                "resolve url": true,

                import: []

            }

        }

    }

};

svg 用例(切换loader)(阿里图标库就不用再生成一套新的字体来替换了)

const path = require("path");

function resolve(dir) {

    return path.join(__dirname, dir);

}
chainWebpack(config) {
        config.module.rule('svg')
            .exclude.add(resolve('src/icons'));
        
        // 添加svg-sprite-loader
        config.module.rule('icons')
            .test(/\.svg$/) //设置test
            .include.add(resolve('src/icons')) //加入include
              .end() // add完上下文进入了数组,使用end回退
            .use('svg-sprite-loader') // 添加loader
              .loader('svg-sprite-loader') // 切换上下文到loader  
              .options({symbolId: 'icon-[name]'}) //指定选项
              .end()
    }

一般使用使用方法

import '@/icon/svg/demo.svg'

<svg>

   <use xlink:href="#icon-demo" ></use>

</svg>

组件封装方法

图标自动导入原理:webpack 的require.context自动导入



// icon/index.js

   获取当前目录 同级目录svg下为上下文, 这样req 就是只加载svg 目录下的模块函数
   第二个参数是不往下递归
   第三个参数是正则匹配规则
   import Vue from 'Vue' 
   import Icon from '@/components/Icon.vue'
   const req = require.context('./svg', false, /\.svg$/)

   req.keys().map(req)
   // Icon组件全局注册一下
   Vue.component("Icon", Icon);

// main.js

   import ./icon/index.js

// components/Icon.vue
    
   <template>
      <svg :class="svgClass" aria-hidden="true" v-on="$listeners">
          <use :xlink:href="iconName" />
      </svg>
   </template>

   <script>
   export default {
     name: 'Icon',
     props: {
     iconClass: {
       type: String,
       required: true
     },
     className: {
       type: String,
       default: ''
     }
  },
  computed: {
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    }
  }
}
</script>

// 使用方法与自定义icon样式

<Icon icon-class="qq" class-name="myicon"></Icon>

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue.config.js配置详解 的相关文章

  • 在为水质担忧吗?——水质检测大屏展示系统启动(inscode直观运行)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • 动态规划法求解编辑距离问题

    问题描述 设A和B是两个字符串 现在要用最少的字符操作次数 将字符串A转换为字符串B 这里所说的字符操作共有3种 1 删除一个字符 2 插入一个字符 3 将一个字符替换另一个字符 例如 A sfdqxbw B gfdgw 结果为4 问题求解

随机推荐

  • STM32超声波模块测距

    特别注意 单独t link只能提供3 3v电压 模块接5v电压只能收到3 3V 供电的时候请接上micro口 模块介绍 HC SR04超声波模块可提供2cm 400cm的距离感测功能 测量精度可以达到3mm 通过声音340m s t 2可以
  • TCP3次握手连接协议和4次握手断开连接协议

    TCP IP 状态机 如下图所示 在TCP IP协议中 TCP协议提供可靠的连接服务 采用三次握手建立一个连接 如图1所示 SYN包表示标志位syn 1 ACK包表示标志位ack 1 SYN ACK包表示标志位syn 1 ack 1 1 第
  • 关于stm32f429的MDA2D的M2M模式

    LTDC的使用问题 可参考官方例程的配置 需要注意的是 它只是一个LCD控制器 需要定义缓存的地址 可以设置在flash里 但是不便于操作 一般还是建议设置外部SDRAM里 LTDC中DMA2D的使用问题 429中LTDC的2D加速功能还比
  • 记Tomcat删除war包问题

    由于不清楚tomcat部署原理 误认为tomcat部署完成之后 可以把war删除 然后以后每次部署 只需要增量部署就行了 然后还怕由于war包的存在 增量部署的内容会被覆盖掉 不清楚war包什么时候会自动重新部署 于是 rm rf mm w
  • Python将.py文件打包成.exe可执行文件

    1 安装Pyinstaller库 pip install pyinstaller 2 在 py文件的所在文件夹Shift 右键 打开后输入pyinstaller F 要打包的文件名称 例如Mqtt py F参数表示覆盖打包 如果有旧的会覆盖
  • [电路设计]按键方案

    电路设计 按键方案 本文记录和介绍几种按键解决方案 包括普通按键 按键编码电路 ADC按键的工作原理 1 普通按键 一般使用的按键原理图如下图所示 由按键 上拉电阻和消抖滤波电容组成 按键断开时 K e y I i n
  • 级数求和公式

    级数求和公式是用于求解有限的或无限的等差 等比数列的总和 它的一般形式为 Sn a1 a2 a3 an 其中 a1 为该级数的首项 an 为该级数的末项 Sn 表示该级数的和 1 如果是有限等差数列 其求和公式为 Sn n a1 an 2
  • Spring Cloud Eureka注册中心组件搭建

    第一步 Idea 新建spring boot项目 选中Cloud 中 Eureka Server 第二部 配置文件 将application application 后缀改为application yml 也可以不修改 我是用的yml 粘贴
  • 计算机指令格式

    计算机的指令格式与机器的字长 存储器的容量及指令的功能都有很大的关系 从便于程序设计 增加基本操作并行性 提高指令功能的角度来看 指令中应包含多种信息 但在有些指令中 由于部分信息可能无用 这将浪费指令所占的存储空间 并增加了访存次数 也许
  • idea中处理依赖注入爆红问题

    1 这是idea里的编译异常 这里会出现依赖注入爆红的情况 有以下两种方式 1 1 方式一 在进行注入的时候 并没有UserMapper这个接口 所以爆异常 解决方式 需要创建一个UserMapper接口并交给Spring容器管理 1 2
  • 【转】伺服电机三环控制的原理(位置环,运动环,电流环)

    运动伺服一般都是三环控制系统 从内到外依次是电流环速度环位置环 1 首先电流环 电流环的输入是速度环PID调节后的那个输出 我们称为 电流环给定 吧 然后呢就是电流环的这个给定和 电流环的反馈 值进行比较后的差值在电流环内做PID调节输出给
  • 剑指offer(C++版本)

    剑指offer c 版本 二维数组查找 替换空格 从尾到头打印链表 重建二叉树 用两个栈实现队列 旋转数组的最小数字 斐波那契数列 跳台阶 矩阵覆盖 二进制1的个数 数值的整数次方 调整数组顺序使奇数位于偶数前面 链表中倒数第k个结点 反转
  • 【ANN预测】基于遗传算法优化 ANN附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • qt在windows下交叉编译arm架构程序

    1
  • 《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装kubeadm、kubelet和kubectl》

    一 背景 由于客户网络处于专网环境下 使用kubeadm工具安装K8S集群 由于无法连通互联网 所有无法使用apt工具安装kubeadm kubelet kubectl 当然你也可以使用apt get工具在一台能够连通互联网环境的服务器上下
  • 单淘汰赛制两队相遇算法

    对于这种单循环赛制acm也是常遇到这样的题那么 对于这样的比赛我们要怎么模拟所有的可能是一个问题 我们如何判断两个队在某一轮是否会遇到呢 我们其实可以利用二进制的性质 设某一轮比赛为i 求j和k两只队伍是否能比赛 下面我们用二进制来表示队伍
  • vp8-vp9-ivf文件格式

    经常遇到ivf格式 下面看看它的头 typedef struct ivf header 0 3 固定的 DKIF 字符串 4 5 version 应该为0 6 7 header的字节长度 8 11 编码器的FourCC e g VP80 1
  • 在内嵌窗口中调用父窗口的javascript代码

    noname1 html noname2 html
  • 【原创】【硬件电路】AltiumDesigner18规则检查含义

    文章首发于同名微信公众号 DigCore 欢迎关注同名微信公众号 DigCore 及时获取最新技术博文 Layout时最常用的错误检查 这需要在布局布线前做好规则设置 所谓磨刀不误砍柴工 尤其是在Layout时 如果违反规则 就会亮起绿色
  • vue.config.js配置详解

    1 vue inspect rule 命令获取vue config js中的chainWebpack配置项 2 vue inspect rule svg 筛选配置项 const path require path function reso