vite vite.config.js中的配置

news2024/11/16 5:36:57

vite打包依赖于 rollup和esbuild

rollup中文文档

esbulid中文文档

基本配置


import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";

import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";

//告诉 Vite 打包后的产物哪些 dependencies 需要在页面入口 html 文件中随 public 目录(或 CDN)引入
import htmlConfig from "vite-plugin-html-config"; 

//告诉vite什么 dependencies 不参与打包
import { viteExternalsPlugin } from "vite-plugin-externals"; 
// https://vitejs.dev/config/
import { fileURLToPath } from "url";
const filename = fileURLToPath(
    import.meta.url);
// 跟目录
const _dirname = path.dirname(filename);

export default ({ mode }) => {
    // console.log(loadEnv(mode, process.cwd()).VITE_APP_BASE_API, "api");
    return defineConfig({
        define: {
            "process.env": process.env
        },

        // 插件配置
        plugins: [
            vue(),
          
            AutoImport({
                resolvers: [
                    ElementPlusResolver({
                        importStyle: true,
                    }),
                ],
            }),

            Components({
                resolvers: [
                    ElementPlusResolver({
                        importStyle: true,
                    }),
                ],
            }),

            // 这里表示 xxxx不参与打包
            viteExternalsPlugin({
                xxxx: "xxxx",
            }),

            // 引入本地库 xxxx一般放在 public下
            htmlConfig({
                headScripts: [{
                        src: "/xxxx/xxxx.js",
                    },
                    
                ],
                links: [{
                    rel: "stylesheet",
                    href: "/xxxx/xxxx.css",
                }, ],
            }),
        ],
        base: "./",
        publicDir: "public",
        productionSourceMap: false, // 生产环境是否生成 sourceMap 文件
        //设置的别名
        resolve: {
            // 如果报错__dirname找不到,需要安装node,
            // 执行npm i @types/node --save-dev
            alias: {
                "@": path.resolve(_dirname, "./src"),
                "@assets": path.resolve(_dirname, "./src/assets"),
                "@utils": path.resolve(_dirname, "./src/utils"),
                "@components": path.resolve(_dirname, "./src/components"),
            },
        },
        // 服务配置
        server: {
            port: 3002, // 端口号
            open: true, // 自动在浏览器打开
            host: "0.0.0.0",
            https: false, // 是否开启 https,
            proxy: {
                "/api": {
                    target: loadEnv(mode, process.cwd()).VITE_APP_BASE_API,
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/api/, ""),
                },

            },
        },
        
        build: {
            minify: false,
            // 进行压缩计算
            brotliSize: false,
            //指定输出路径
            assetsDir: "./",
            // 指定输出文件路径
            outDir: "dist",
            // 代码压缩配置
            terserOptions: {
                // 生产环境移除console
                compress: {
                    drop_console: true,
                    drop_debugger: true,
                },
            },
            // chunkSizeWarningLimit: 1500,大文件报警阈值设置,不建议使用
            rollupOptions: {
                output: {
                    //静态资源分类打包
                    chunkFileNames: "static/js/[name]-[hash].js",
                    entryFileNames: "static/js/[name]-[hash].js",
                    // assetFileNames: "static/[ext]/[name]-[hash].[ext]",
                    assetFileNames(assetInfo) {

                        // 判断后缀分别放到不用的文件夹中
                        if (assetInfo.name.endsWith('.css')) {
                            return "static/css/[name]-[hash].[ext]"
                        }
                        if (["png", "jpg", "svg", "PNG"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/img/[name]-[hash].[ext]"
                        }
                        if (["ttf", "woff", "woff2"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/fonts/[name]-[hash].[ext]"
                        }
                        return "static/css/[name]-[hash].[ext]"
                    },
                    manualChunks(id) {
                        //静态资源分拆打包
                        if (id.includes("node_modules")) {
                            return id
                                .toString()
                                .split("node_modules/")[1]
                                .split("/")[0]
                                .toString();
                        }
                    },
                },
            },
        },
    });
};

 组件自动引入

import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
// 使用

plugins: [

AutoImport({
    resolvers: [
        ElementPlusResolver({
            importStyle: true,
        }),
    ],
}),
Components({
    resolvers: [
        ElementPlusResolver({
            importStyle: true,
        }),
    ],
})
]

固化版本,cdn引入和不进行打包的插件

这个插件是告诉 vite,在构建时,告诉 rollup 不要对 elementPlus这个包进行打包,而是在 index.html 中定义一个全局对象 elementPlus,定义到 window 上。


import { viteExternalsPlugin } from "vite-plugin-externals"; 

// 使用


plugins: [
    viteExternalsPlugin({
        elementPlus: "elementPlus",
    })
]

vite-plugin-html-config 这个插件可以在开发时(dev script)和构建时(build script)修改 index.html,注入一些 <link><script> 等 html 标签,支持加入 js 脚本

一般都是配个上一个 vite-plugin-externals 使用的 这样做的目的是为了 ,固化版本(我这里以elementplus为例)。

import htmlConfig from "vite-plugin-html-config";

//使用

 plugins: [
 htmlConfig({
    headScripts: [{
        src: "/element/elementPlus.js",
    }],
    links: [{
        rel: "stylesheet",
        href: "/element/elementPlus.css",
    }, ]
})]

设置别名

resolve: {
    // 如果报错__dirname找不到,需要安装node,
     // 执行npm i @types/node --save-dev
    alias: {
        "@": path.resolve(_dirname, "./src"),
        "@assets": path.resolve(_dirname, "./src/assets"),
        "@utils": path.resolve(_dirname, "./src/utils"),
        "@components": path.resolve(_dirname, "./src/components"),
    },
},

打包 分配包 rollupOptions.output

output.entryFileNames 该选项用于指定 chunks 的入口文件模式,也就是定义默认js输出到dist的那个文件夹下,是个字符串也可以是个函数(函数输出也是字符串)

output.chunkFileNames  分包时候会用到,默认import引入的文件分到那个dist那个文件夹下,是个字符串也可以是个函数(函数输出也是字符串)

output.assetFileNames 处理css 和图片等其他文件分包

outpuy.manualChunks 分割打包,一般会打包到一个js里面,可能最终的代码非常大。从而影响加载时间,所以采取分包,会解决这个问题

build:{    
        rollupOptions: {
                output: {

                     entryFileNames: "static/js/[name]-[hash].js",
                    //静态资源分类打包
                    chunkFileNames: "static/js/[name]-[hash].js",
                   
                    // assetFileNames: "static/[ext]/[name]-[hash].[ext]",
                    assetFileNames(assetInfo) {

                        // 判断后缀分别放到不用的文件夹中
                        if (assetInfo.name.endsWith('.css')) {
                            return "static/css/[name]-[hash].[ext]"
                        }
                        if (["png", "jpg", "svg", "PNG"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/img/[name]-[hash].[ext]"
                        }
                        if (["ttf", "woff", "woff2"].some(ext => assetInfo.name.endsWith(ext))) {
                            return "static/fonts/[name]-[hash].[ext]"
                        }
                        return "static/css/[name]-[hash].[ext]"
                    },
                    manualChunks(id) {
                        //静态资源分拆打包
                        if (id.includes("node_modules")) {
                            return id
                                .toString()
                                .split("node_modules/")[1]
                                .split("/")[0]
                                .toString();
                        }
                    },
                },
            }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1084806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pycharm的debug,你知道每个按钮对应哪个功能吗?

本文讲解pycharm的debug 1. debug的汇总图2. 第一个图标&#xff08;Step Over&#xff09;3. 第二个图标&#xff08;Step into&#xff09;4. 第三个图标&#xff08;Step Into My Code&#xff09;5. 第四个图标&#xff08;Step Out&#xff09;6. 第五个图标&#xff08;R…

02 stm32-hal库 timer 基本定时器设定

1.配置始终时钟参数 >2. 初始化 MX_TIM3_Init();/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim3);> 3.增加回调函数 4 中断服务函数 void TIM3_IRQHandler(void) {/* USER CODE BEGIN TIM3_IRQn 0 *//* USER CODE END TIM3_IRQn 0 */HAL_TIM_IRQHandler(&…

KITTI数据集中的二进制激光雷达数据(.bin文件)转换为点云数据(.pcd文件)(C++代码)

目录 main.cpp CMakeLists.txt main.cpp #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <fstream> #include <iostream> #include <vector>int main() {// Define file pathsstd::string input_filename "/home/f…

基于IDEA集成环境---Nacos安装

Nacos服务器是独立安装部署的&#xff0c;因此我们需要下载最新的Nacos服务端程序&#xff0c;下载地址&#xff1a;https://github.com/alibaba/nacos。 将文件进行解压&#xff0c;得到以下内容&#xff1a; 直接将其拖入到项目文件夹下&#xff0c;便于我们一会在IDEA内部…

Prometheus监控系统

Prometheus监控系统 一、Prometheus 概述&#xff1a;1.概述2.scrape3.Prometheus的架构4.TSDB 作为 Prometheus 的存储引擎完美契合了监控数据的应用场景5.Prometheus 的特点&#xff1a;6.Prometheus 的生态组件7.Prometheus 的工作模式8.Prometheus 的工作流程9.Prometheus …

当想为SLB申请公网域名时,缩写是什么意思

SLB的缩写是Server Load Balancer&#xff0c;即服务器负载均衡器。 是一种内网吗? 不&#xff0c;SLB&#xff08;Server Load Balancer&#xff09;是一种位于应用程序和网络之间的设备或服务&#xff0c;用于在多个服务器之间分发流量、负载均衡以及提供高可用性。它通常…

【vue3+ts】项目初始化

1、winr呼出cmd&#xff0c;输入构建命令 //用vite构建 npm init vitelatest//用cli脚手架构建 npm init vurlatest2、设置vscode插件 搜索volar&#xff0c;安装前面两个 如果安装了vue2的插件vetur&#xff0c;要禁用掉&#xff0c;否则插件会冲突

【C#】什么是并发,C#常规解决高并发的基本方法

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 在实际项目开发中&#xff0c;多少都会遇到高并发的情况&#xff0c;有可能是网络问题&#xff0c;连续点击鼠标无反应快速发起了N多次调用接口&#xff0c; 导致极短时间内重复调用了多次…

ar实景火灾模拟体验加强了学员对火灾险情的防范

在用火用电频繁的当下&#xff0c;消防安全知识和防范意识的培训显得尤为重要&#xff0c;为了帮助人们时刻牢记灭火技巧和灾害防范&#xff0c;AR开发公司基于AR大屏端开发的智慧消防AR模拟体验系统&#xff0c;为前来参观学习的客户提供一种身临其境的体验。 首先&#xff0c…

VR全景营销颠覆传统营销,让消费者身临其境

随着VR的普及&#xff0c;各种VR产品、功能开始层出不穷&#xff0c;并且在多个领域都有落地应用&#xff0c;例如文旅、景区、酒店、餐饮、工厂、地产、汽车等&#xff0c;在这个“内容为王”的时代&#xff0c;VR全景展示也是一种新的内容表达方式。 VR全景营销让消费者沉浸式…

SOFAJRaft 注册中心-心跳检测实现

文章目录 1.前言2.心跳流程图整体流程心跳续约&心跳检测 3.实现步骤3.1 客户端3.2 服务端3.2.1 HeartBeatRpcProcessor3.2.2 HeartBeatRequestHandler3.2.3 ServiceDiscoveryRequestHandlerFactory 新增 onBeat 方法3.2.4 ServiceDiscoveryCheckBeatThread 心跳检测线程3.2…

开发一个npm组件包(2)

通过vueelement 原来后台 开发npm包的时候 会遇到一下几个问题 入口文件变化为package/index 需要再配置打包方法 package.json下 "scripts": {"package": "vue-cli-service build --target lib ./src/package/index.js --name managerpage --dest…

scsi READ CAPACITY (10)命令总结

READ CAPACITY (10)概述&#xff1a; READ CAPACITY(10)命令(参见表119)请求设备服务器将描述直接访问块设备的容量和介质格式的8字节参数数据传输到数据缓存中。这个命令可以被处理&#xff0c;就好像它有一个HEAD OF QUEUE任务属性。 如果逻辑单元支持保护信息&#xff0c;应…

Java使用opencv实现人脸识别、人脸比对

1. opencv概述 OpenCV是一个开源的计算机视觉库&#xff0c;它提供了一系列丰富的图像处理和计算机视觉算法&#xff0c;包括图像读取、显示、滤波、特征检测、目标跟踪等功能。 opencv官网&#xff1a;https://opencv.org/ 2. 安装opencv 2.1 下载opencv opencv下载&#x…

idea中父工程Project创建

1.file-->new-->Project 2.选择maven包和JavaSDK 3.填写项目名&#xff0c;选择文件目录&#xff0c;项目包等 4.配置maven tip&#xff1a;约定>配置>编码 5.设置项目编码 6.注解生效激活&#xff0c;便于项目中使用注解 7.Java编译版本选择8 8.File Type 过滤&a…

Java idea查看自定义注解的调用地方

Java idea查看自定义注解的调用地方

RunnerGo UI自动化测试功能使用体验

首先需要进入官网&#xff0c;RunnerGo支持开源&#xff0c;可以自行下载安装&#xff0c;也可以点击右上角体验企业版按钮快速体验 点击体验企业版进入工作台后可以点击页面上方的UI自动化 进入到测试页面 创建元素 我们可以在元素管理中创建我们测试时需要的元素 这里我们以…

【低代码表单设计器】:创造高效率的流程化办公!

当前&#xff0c;有不少用户朋友对低代码表单设计器挺感兴趣。其实&#xff0c;如果想要实现提质增效的办公效率&#xff0c;创造一个流程化办公&#xff0c;那么确实可以了解低代码技术平台。流辰信息作为服务商&#xff0c;拥有较强的自主研发能力&#xff0c;根据市场的变化…

CANoe-如何实现27服务解锁

27服务解锁的工作原理可以在文章《诊断27服务介绍》查看,这里简单介绍下流程: Tester向ECU发送27 01诊断请求请求种子seed,ECU收到该请求后随机生成一个seed,通过67 01诊断响应发送给Tester。Tester收到该诊断响应后取出seed值,传入和ECU相同的算法后生成一个密钥keyT。然…

[C++11]花括号{}、initializer_list、auto、decltype

文章目录 1.花括号{ }的扩展2.initializer_list3.auto4.decltype5.容器的增加5.1array[useless]5.2forward_list[useless]5.3unordered_map/unordered_set5.4统一增加 6.知乎文章 1.花括号{ }的扩展 int main() {//C98花括号{ }支持 1.数组 2.结构体struct Point{int _x;int _…