当前位置: 首页 > news >正文

vite 打包 学习

plugins.jsimport vue from "@vitejs/plugin-vue";
// 自动引入插件
import autoImport from "unplugin-auto-import/vite";
import setupExtend from "unplugin-vue-setup-extend-plus/vite";
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import Components from 'unplugin-vue-components/vite'
// gzip 插件
import compression from "vite-plugin-compression";
// 查看 打包文件大小 插件
import { visualizer } from 'rollup-plugin-visualizer'export default function getVitePlugins(command) {
// 这个值在package.js 中 不同的打包方式修改这个值const isAnalyze = process.env.ANALYZE === 'true';return [vue(),autoImport({// Auto import functions from Vue, e.g. ref, reactive, toRef...// 自动导入 Vue 相关函数,如:ref, reactive, toRef 等imports: ["vue", "vue-router", "pinia"],// Auto import functions from Element Plus, e.g. ElMessage, ElMessageBox... (with style)// 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)resolvers: [ElementPlusResolver()],dts: false,}),command === "build"? compression({ext: ".gz",deleteOriginFile: false,}): null,Components({resolvers: [ElementPlusResolver()],}),setupExtend({}),isAnalyze ? visualizer({open: true,filename: 'visualizer.html' //分析图生成的文件名}) : null];
}
vite.config.js
import { defineConfig,loadEnv } from 'vite'
import path from "path";
import getVitePlugins from './vite/plugins.js'
// https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => {const env = loadEnv(mode, process.cwd());return {resolve: {alias: {// 设置别名"@": path.resolve(__dirname, "./src"),},extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"],},plugins: [getVitePlugins(command)],base: env.VITE_ENV === "production" ? "./" : "/", // 公共基础路径 相当于 webpack的output.publicPathbuild: {outDir: 'dist/static',  // 打包输出目录rollupOptions: {output: {entryFileNames: "js/[name]-[hash].js",  // 入口文件名chunkFileNames: "js/[name]-[hash].js", // 代码分割文件名assetFileNames(assetInfo) { // 根据后缀名匹配 资源文件名if (assetInfo.name.endsWith(".css")) {return "css/[name]-[hash].css";}const imgExts = [".png", ".jpg", ".jpeg", ".gif", ".svg", '.webp', '.ico'];if (imgExts.some(ext => assetInfo.name.endsWith(ext))) {return "img/[name]-[hash].[ext]";}return "assets/[name]-[hash].[ext]";},// 将不同的模块放在不同的chunk中manualChunks: (id) => {if (id.includes('node_modules')) {// if (id.includes('vue')) return 'vendor-vue';if (id.includes('lodash')) return 'vendor-lodash';if (id.includes('element-plus')) return 'vendor-element';if (id.includes('axios')) return 'vendor-axios';if (id.includes('leafer-ui')) return 'vendor-leafer';return 'vendor-other';}// 根据你的具体需求调整这里的逻辑return 'main';},}}}}})
main.jsimport { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'let app = createApp(App)for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component)
}app.use(router)
app.mount('#app')
package.jscross-env 是用来 判断环境变量的 "build:test": "cross-env ANALYZE=true vite build" 
修改了ANALYZE 的值  
这样的话 npm run build 就是正常的打包
npm run build:test 打包完 就会生成打包分析的网页 并打开
{"name": "vite-project","private": true,"version": "0.0.0","type": "module","scripts": {"dev": "vite","build": "vite build","preview": "vite preview","build:test": "cross-env ANALYZE=true vite build"},"dependencies": {"@element-plus/icons-vue": "2.3.1","axios": "^1.7.5","cross-env": "^7.0.3","element-plus": "^2.8.1","leafer-ui": "^1.0.2","less": "^4.2.0","lodash": "^4.17.21","pinia": "^2.2.2","sass": "^1.77.8","vue": "^3.4.37","vue-router": "^4.4.3"},"devDependencies": {"@vitejs/plugin-vue": "^5.1.2","rollup-plugin-visualizer": "^5.12.0","unplugin-auto-import": "0.17.1","unplugin-vue-components": "^0.27.4","unplugin-vue-setup-extend-plus": "1.0.0","vite": "^5.4.1","vite-plugin-compression": "0.5.1"}
}

打包结果
在这里插入图片描述
打包后的目录
在这里插入图片描述
将js放在一个目录下 css放在一个目录下 图片在在一个目录下

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 自然语言处理-词向量转换
  • 数据结构:树与二叉树
  • Pygame中获取鼠标按键状态的方法
  • 【高级编程】实用类详解(补充)StringBuffer类 和 StringBuilder类
  • UE5 C++ 读取图片插件(一)
  • 【刷题笔记】删除并获取最大点数粉刷房子
  • 2024国赛数学建模A题思路模型代码
  • 计算机网络 第1章 概述
  • C++的四种规范的类型转换
  • 坐牢第三十四天(c++)
  • shell判断、if语句
  • 探索C++编程技巧:计算两个字符串的最长公共子串
  • 内网Exadata使用git的配置过程
  • 一、VSCode安装IDF5.3
  • 数据结构---->内核链表
  • SegmentFault for Android 3.0 发布
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Git 使用集
  • golang 发送GET和POST示例
  • input实现文字超出省略号功能
  • Java,console输出实时的转向GUI textbox
  • Promise面试题2实现异步串行执行
  • python3 使用 asyncio 代替线程
  • React-Native - 收藏集 - 掘金
  • RxJS: 简单入门
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 初识 beanstalkd
  • 构建二叉树进行数值数组的去重及优化
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 浏览器缓存机制分析
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​补​充​经​纬​恒​润​一​面​
  • ​渐进式Web应用PWA的未来
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (ZT)薛涌:谈贫说富
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)Flink 窗口计算
  • (图)IntelliTrace Tools 跟踪云端程序
  • (五)IO流之ByteArrayInput/OutputStream
  • (一) storm的集群安装与配置
  • (一)SpringBoot3---尚硅谷总结
  • (转)Google的Objective-C编码规范